extend.texi, [...]: Eliminate overfull or underfull hboxes.

* doc/extend.texi, doc/gcc.texi, doc/install-old.texi,
        doc/invoke.texi, doc/md.texi, doc/rtl.texi, doc/include/gpl.texi:
        Eliminate overfull or underfull hboxes.

From-SVN: r45012
This commit is contained in:
Zack Weinberg 2001-08-18 21:02:44 +00:00
parent b649398a84
commit 9c34dbbf06
8 changed files with 341 additions and 342 deletions

View File

@ -1,6 +1,12 @@
2001-08-18 Zack Weinberg <zackw@panix.com>
* cpperror.c: Use VA_OPEN/VA_CLOSE/VA_FIXEDARG throughout.
* doc/extend.texi, doc/gcc.texi, doc/install-old.texi,
doc/invoke.texi, doc/md.texi, doc/rtl.texi, doc/include/gpl.texi:
Eliminate overfull or underfull hboxes.
2001-08-18 Zack Weinberg <zackw@panix.com>
* cpperror.c: Use VA_OPEN/VA_CLOSE/VA_FIXEDARG throughout.
2001-08-18 Zack Weinberg <zackw@panix.com>
@ -12,12 +18,12 @@
TARGET_SCHED_ADJUST_PRIORITY, TARGET_SCHED_ISSUE_RATE,
TARGET_SCHED_VARIABLE_ISSUE, TARGET_SCHED_INIT,
TARGET_SCHED_FINISH, TARGET_SCHED_REORDER,
TARGET_SCHED_REORDER2, TARGET_SCHED_CYCLE_DISPLAY):
TARGET_SCHED_REORDER2, TARGET_SCHED_CYCLE_DISPLAY):
New hook #defines to be overridden.
(TARGET_SCHED): Bring them all together.
(TARGET_INITIALIZER): Update.
* target.h: Don't forward declare struct rtx_def. Use 'rtx'
instead of 'struct rtx_def *' throughout.
instead of 'struct rtx_def *' throughout.
(struct sched): New set of hooks for the scheduler.
* Makefile.in (haifa-sched.o): Depend on target.h.
* doc/tm.texi: Document the new scheduler hooks, together in
@ -81,7 +87,7 @@
2001-08-18 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* except.c (TYPE_HASH): Delete.
* objc/objc-act.c (HASHFUNCTION): Cast to size_t, not
HOST_WIDE_INT.
@ -140,7 +146,7 @@
(MAX_OFILE_ALIGNMENT): New.
(ASM_OUTPUT_ALIGNED_LOCAL): Use bss_section.
* config/mips/mips.c (mips_make_temp_file, temp_filename): Remove.
(copy_file_data): Split out from
(copy_file_data): Split out from
(mips_asm_file_end): ... here.
(mips_asm_file_start): Remove extra .section directive. Use
tmpfile instead of mips_make_temp_file.

View File

@ -147,7 +147,8 @@ results (5.2.4.2.2).}
@item
@cite{The rounding behaviors characterized by non-standard values
of @code{FLT_ROUNDS} (5.2.4.2.2).}
of @code{FLT_ROUNDS} @gol
(5.2.4.2.2).}
@item
@cite{The evaluation methods characterized by non-standard negative
@ -788,9 +789,11 @@ but it's not wise to take the risk. If, however, the nested function
does not refer 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 @dfn{trampolines}. A paper describing them is
available as @uref{http://people.debian.org/~karlheg/Usenix88-lexic.pdf}.
GCC implements taking the address of a nested function using a technique
called @dfn{trampolines}. A paper describing them is available as
@noindent
@uref{http://people.debian.org/~karlheg/Usenix88-lexic.pdf}.
A nested function can jump to a label inherited from a containing
function, provided the label was explicitly declared in the containing
@ -2546,10 +2549,17 @@ An attribute specifier list may appear immediately before a declarator
(other than the first) in a comma-separated list of declarators in a
declaration of more than one identifier using a single list of
specifiers and qualifiers. Such attribute specifiers apply
only to the identifier before whose declarator they appear. For example, in
@code{__attribute__((noreturn)) void d0 (void),
__attribute__((format(printf, 1, 2))) d1 (const char *, ...), d2
(void)}, the @code{noreturn} attribute applies to all the functions
only to the identifier before whose declarator they appear. For
example, in
@smallexample
__attribute__((noreturn)) void d0 (void),
__attribute__((format(printf, 1, 2))) d1 (const char *, ...),
d2 (void)
@end smallexample
@noindent
the @code{noreturn} attribute applies to all the functions
declared; the @code{format} attribute only applies to @code{d1}.
An attribute specifier list may appear immediately before the comma,
@ -2557,16 +2567,22 @@ An attribute specifier list may appear immediately before the comma,
than a function definition. At present, such attribute specifiers apply
to the declared object or function, but in future they may attach to the
outermost adjacent declarator. In simple cases there is no difference,
but, for example, in @code{void (****f)(void)
__attribute__((noreturn));}, at present the @code{noreturn} attribute
applies to @code{f}, which causes a warning since @code{f} is not a
function, but in future it may apply to the function @code{****f}. The
precise semantics of what attributes in such cases will apply to are not
yet specified. Where an assembler name for an object or function is
specified (@pxref{Asm Labels}), at present the attribute must follow the
@code{asm} specification; in future, attributes before the @code{asm}
specification may apply to the adjacent declarator, and those after it
to the declared object or function.
but, for example, in
@smallexample
void (****f)(void) __attribute__((noreturn));
@end smallexample
@noindent
at present the @code{noreturn} attribute applies to @code{f}, which
causes a warning since @code{f} is not a function, but in future it may
apply to the function @code{****f}. The precise semantics of what
attributes in such cases will apply to are not yet specified. Where an
assembler name for an object or function is specified (@pxref{Asm
Labels}), at present the attribute must follow the @code{asm}
specification; in future, attributes before the @code{asm} specification
may apply to the adjacent declarator, and those after it to the declared
object or function.
An attribute specifier list may, in future, be permitted to appear after
the declarator in a function definition (before any old-style parameter
@ -2610,12 +2626,24 @@ declaration @code{T D} specifies the type
@var{type-qualifier-and-attribute-specifier-list} @var{Type}'' for
@var{ident}.
For example, @code{void (__attribute__((noreturn)) ****f)();} specifies
the type ``pointer to pointer to pointer to pointer to non-returning
function returning @code{void}''. As another example, @code{char
*__attribute__((aligned(8))) *f;} specifies the type ``pointer to
8-byte-aligned pointer to @code{char}''. Note again that this describes
intended future semantics, not current implementation.
For example,
@smallexample
void (__attribute__((noreturn)) ****f) (void);
@end smallexample
@noindent
specifies the type ``pointer to pointer to pointer to pointer to
non-returning function returning @code{void}''. As another example,
@smallexample
char *__attribute__((aligned(8))) *f;
@end smallexample
@noindent
specifies the type ``pointer to 8-byte-aligned pointer to @code{char}''.
Note again that this describes intended future semantics, not current
implementation.
@node Function Prototypes
@section Prototypes and Old-Style Function Definitions
@ -2672,6 +2700,7 @@ isroot (uid_t x)
@}
@end example
@noindent
GNU C++ does not support old-style function definitions, so this
extension is irrelevant.
@ -4166,11 +4195,11 @@ recommend general use of these functions.
The remaining functions are provided for optimization purposes.
@opindex fno-builtin
GCC includes built-in versions of many of the functions in the
standard C library. The versions prefixed with @code{__builtin_} will
always be treated as having the same meaning as the C library function
even if you specify the @option{-fno-builtin} (@pxref{C Dialect Options})
option. Many of these functions are only optimized in certain cases; if
GCC includes built-in versions of many of the functions in the standard
C library. The versions prefixed with @code{__builtin_} will always be
treated as having the same meaning as the C library function even if you
specify the @option{-fno-builtin} option. (@pxref{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 will
be emitted.
@ -4184,38 +4213,38 @@ strict C89 mode (@option{-ansi} or @option{-std=c89}).
Outside strict ISO C mode, the functions @code{alloca}, @code{bcmp},
@code{bzero}, @code{index}, @code{rindex} and @code{ffs} may be handled
as built-in functions. Corresponding versions @code{__builtin_alloca},
@code{__builtin_bcmp}, @code{__builtin_bzero}, @code{__builtin_index},
@code{__builtin_rindex} and @code{__builtin_ffs} are also recognized in
strict ISO C mode.
as built-in functions. All these functions have corresponding versions
prefixed with @code{__builtin_}, which may be used even in strict C89
mode.
The ISO C99 functions @code{conj}, @code{conjf}, @code{conjl},
@code{creal}, @code{crealf}, @code{creall}, @code{cimag}, @code{cimagf},
@code{cimagl}, @code{llabs} and @code{imaxabs} are handled as built-in functions
except in strict ISO C89 mode. There are also built-in versions of the ISO C99
functions @code{cosf}, @code{cosl}, @code{fabsf}, @code{fabsl},
@code{sinf}, @code{sinl}, @code{sqrtf}, and @code{sqrtl}, that are
recognized in any mode since ISO C89 reserves these names for the
purpose to which ISO C99 puts them. All these functions have
corresponding versions prefixed with @code{__builtin_}.
@code{cimagl}, @code{llabs} and @code{imaxabs} are handled as built-in
functions except in strict ISO C89 mode. There are also built-in
versions of the ISO C99 functions @code{cosf}, @code{cosl},
@code{fabsf}, @code{fabsl}, @code{sinf}, @code{sinl}, @code{sqrtf}, and
@code{sqrtl}, that are recognized in any mode since ISO C89 reserves
these names for the purpose to which ISO C99 puts them. All these
functions have corresponding versions prefixed with @code{__builtin_}.
The following ISO C89 functions are recognized as built-in functions unless
@option{-fno-builtin} is specified: @code{abs}, @code{cos}, @code{fabs},
The ISO C89 functions @code{abs}, @code{cos}, @code{fabs},
@code{fprintf}, @code{fputs}, @code{labs}, @code{memcmp}, @code{memcpy},
@code{memset}, @code{printf}, @code{sin}, @code{sqrt}, @code{strcat},
@code{strchr}, @code{strcmp}, @code{strcpy}, @code{strcspn},
@code{strlen}, @code{strncat}, @code{strncmp}, @code{strncpy},
@code{strpbrk}, @code{strrchr}, @code{strspn}, and @code{strstr}. All
of these functions have corresponding versions prefixed with
@code{__builtin_}, except that the version for @code{sqrt} is called
@code{__builtin_fsqrt}.
GCC provides built-in versions of the ISO C99 floating point
comparison macros (that avoid raising exceptions for unordered
operands): @code{__builtin_isgreater}, @code{__builtin_isgreaterequal},
@code{__builtin_isless}, @code{__builtin_islessequal},
@code{__builtin_islessgreater}, and @code{__builtin_isunordered}.
@code{strpbrk}, @code{strrchr}, @code{strspn}, and @code{strstr} are all
recognized as built-in functions unless @option{-fno-builtin} is
specified. All of these functions have corresponding versions prefixed
with @code{__builtin_}, except that the version for @code{sqrt} is
called @code{__builtin_fsqrt}.
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 ( @code{isgreater},
@code{isgreaterequal}, @code{isless}, @code{islessequal},
@code{islessgreater}, and @code{isunordered}) , with @code{__builtin_}
prefixed. We intend for a library implementor to be able to simply
@code{#define} each standard macro to its built-in equivalent.
@deftypefn {Built-in Function} int __builtin_constant_p (@var{exp})
You can use the built-in function @code{__builtin_constant_p} to
@ -4943,9 +4972,10 @@ using code written for the Cfront model, the file containing a class
template and the file containing its member templates should be
implemented in the same translation unit.
@item
@opindex falt-external-templates
A slight variation on this approach is to instead use the flag
@option{-falt-external-templates}; this flag causes template
A slight variation on this approach is to use the flag
@option{-falt-external-templates} instead. This flag causes template
instances to be emitted in the translation unit that implements the
header where they are first instantiated, rather than the one which
implements the file where the templates are defined. This header must
@ -5047,11 +5077,11 @@ from C++. Normally, GNU C++ will automatically detect when you are
writing C++ code that uses Java exceptions, and handle them
appropriately. However, if C++ code only needs to execute destructors
when Java exceptions are thrown through it, GCC will guess incorrectly.
Sample problematic code:
Sample problematic code is:
@example
struct S @{ ~S(); @};
extern void bar(); // is implemented in Java and may throw exceptions
extern void bar(); // is written in Java, and may throw exceptions
void foo()
@{
S s;
@ -5071,8 +5101,8 @@ exceptions, or run destructors when exceptions are thrown through them.
You cannot mix Java and C++ exceptions in the same translation unit. It
is believed to be safe to throw a C++ exception from one file through
another file compiled for the for the Java exception model, or vice
versa, but there may be bugs in this area.
another file compiled for the Java exception model, or vice versa, but
there may be bugs in this area.
@node Deprecated Features
@section Deprecated Features

View File

@ -2529,11 +2529,18 @@ our current development sources are available by CVS (see
@uref{http://gcc.gnu.org/cvs.html}). Source and binary snapshots are
also available for FTP; see @uref{http://gcc.gnu.org/snapshots.html}.
If you would like to work on improvements to GCC, please read
@uref{http://gcc.gnu.org/contribute.html} and
@uref{http://gcc.gnu.org/contributewhy.html} for information on how to
make useful contributions and avoid duplication of effort. Suggested
projects are listed at @uref{http://gcc.gnu.org/projects/}.
If you would like to work on improvements to GCC, please read the
advice at these URLs:
@smallexample
@uref{http://gcc.gnu.org/contribute.html}
@uref{http://gcc.gnu.org/contributewhy.html}
@end smallexample
@noindent
for information on how to make useful contributions and avoid
duplication of effort. Suggested projects are listed at
@uref{http://gcc.gnu.org/projects/}.
@node VMS
@chapter Using GCC on VMS
@ -3229,23 +3236,23 @@ tree node that represents an expression has a data type attached.
Variables are represented as declaration nodes.
The language-independent source files for parsing are
@file{stor-layout.c}, @file{fold-const.c}, and @file{tree.c}.
@file{tree.c}, @file{fold-const.c}, and @file{stor-layout.c}.
There are also header files @file{tree.h} and @file{tree.def}
which define the format of the tree representation.
C Preprocessing, for language front ends, that want or require it, is
C preprocessing, for language front ends, that want or require it, is
performed by cpplib, which is covered in seperate documentation. In
particular, the internals are covered in @xref{Top, ,Cpplib internals, cppinternals, Cpplib Internals}.
particular, the internals are covered in @xref{Top, ,Cpplib internals,
cppinternals, Cpplib Internals}.
@c Avoiding overfull is tricky here.
The source files to parse C are
@file{c-aux-info.c},
@file{c-convert.c},
@file{c-decl.c},
@file{c-errors.c},
@file{c-lang.c},
@file{c-parse.in},
@file{c-aux-info.c},
and
@file{c-typeck.c},
along with a header file
@ -3266,19 +3273,18 @@ They are @file{parse.y},
@file{cp-tree.h}, and @file{decl.h}.
The special source files for parsing Objective-C are in @file{objc/}.
They are @file{objc-parse.y}, @file{objc-act.c}, @file{objc-tree.def}, and
@file{objc-act.h}. Certain C-specific files are used for this as
well.
They are @file{objc-act.c}, @file{objc-tree.def}, and @file{objc-act.h}.
Certain C-specific files are used for this as well.
The files
@file{c-common.c},
@file{c-common.def},
@file{c-dump.c},
@file{c-format.c},
@file{c-lex.c},
@file{c-pragma.c},
and
@file{c-semantics.c},
and
@file{c-lex.c},
along with header files
@file{c-common.h},
@file{c-dump.h},
@ -4193,7 +4199,9 @@ For example, in the PowerPC embedded ABI support, it is not desirable
to build libraries compiled with the @option{-mcall-aix} option
and either of the @option{-fleading-underscore} or @option{-mlittle} options
at the same time. Therefore @code{MULTILIB_EXCEPTIONS} is set to
@code{*mcall-aix/*fleading-underscore* *mlittle/*mcall-aix*}.
@smallexample
*mcall-aix/*fleading-underscore* *mlittle/*mcall-aix*
@end smallexample
@findex MULTILIB_EXTRA_OPTS
@item MULTILIB_EXTRA_OPTS

View File

@ -61,7 +61,7 @@ patent must be licensed for everyone's free use or not licensed at all.
modification follow.
@iftex
@unnumberedsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
@unnumberedsec TERMS AND CONDITIONS FOR COPYING,@*DISTRIBUTION AND MODIFICATION
@end iftex
@ifnottex
@center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

View File

@ -430,11 +430,11 @@ machine, the cross-compiler can use them also.
Otherwise, you're on your own in finding header files to use when
cross-compiling.
When you have found suitable header files, put them in the directory
@file{/usr/local/@var{target}/include}, before building the cross
compiler. Then installation will run fixincludes properly and install
the corrected versions of the header files where the compiler will use
them.
When you have found suitable header files, you should put them in the
directory @file{/usr/local/@var{target}/include}, before building the
cross compiler. Then installation will run fixincludes properly and
install the corrected versions of the header files where the compiler
will use them.
Provide the header files before you build the cross-compiler, because
the build stage actually runs the cross-compiler to produce parts of
@ -613,9 +613,9 @@ $ install replace sys$common:[syslib]dcltables
@end smallexample
@item
Type @samp{@@make-gcc} to recompile everything (alternatively, submit
the file @file{make-gcc.com} to a batch queue). If you wish to build
the GNU C++ compiler as well as the GNU CC compiler, you must first edit
Type @samp{@@make-gcc} to recompile everything, or submit the file
@file{make-gcc.com} to a batch queue. If you wish to build the GNU C++
compiler as well as the GNU CC compiler, you must first edit
@file{make-gcc.com} and follow the instructions that appear in the
comments.
@ -680,12 +680,6 @@ the read-only bit set, and the linker will generate warning messages
about mismatched psect attributes for these variables. These warning
messages are merely a nuisance, and can safely be ignored.
If you are compiling with a version of GNU CC older than 1.33, specify
@samp{/DEFINE=("inline=")} as an option in all the compilations. This
requires editing all the @code{gcc} commands in @file{make-cc1.com}.
(The older versions had problems supporting @code{inline}.) Once you
have a working 1.33 or newer GNU CC, you can change this file back.
@item
If you want to build GNU CC with the VAX C compiler, you will need to
make minor changes in @file{make-cccp.com} and @file{make-cc1.com}
@ -829,11 +823,12 @@ done).
is where @code{g++} looks first for header files. The C++ library
installs only target independent header files in that directory.
@code{LOCAL_INCLUDE_DIR} is used only for a native compiler. It is
normally @file{/usr/local/include}. GNU CC searches this directory so
that users can install header files in @file{/usr/local/include}.
@code{LOCAL_INCLUDE_DIR} is used only by native compilers. GNU CC
doesn't install anything there. It is normally
@file{/usr/local/include}. This is where local additions to a packaged
system should place header files.
@code{CROSS_INCLUDE_DIR} is used only for a cross compiler. GNU CC
@code{CROSS_INCLUDE_DIR} is used only by cross compilers. GNU CC
doesn't install anything there.
@code{TOOL_INCLUDE_DIR} is used for both native and cross compilers. It

View File

@ -435,7 +435,8 @@ in the following sections.
-mstrict-align -mno-strict-align -mrelocatable @gol
-mno-relocatable -mrelocatable-lib -mno-relocatable-lib @gol
-mtoc -mno-toc -mlittle -mlittle-endian -mbig -mbig-endian @gol
-mcall-aix -mcall-sysv -mcall-netbsd -mprototype -mno-prototype @gol
-mcall-aix -mcall-sysv -mcall-netbsd @gol
-mprototype -mno-prototype @gol
-msim -mmvme -mads -myellowknife -memb -msdata @gol
-msdata=@var{opt} -mvxworks -G @var{num}}
@ -1107,50 +1108,12 @@ rely on ISO C features. Some vendors are starting to ship systems with
ISO C header files and you cannot use @option{-traditional} on such
systems to compile files that include any system headers.
The @option{-traditional} option also enables @option{-traditional-cpp},
which is described next.
The @option{-traditional} option also enables @option{-traditional-cpp}.
@item -traditional-cpp
@opindex traditional-cpp
Attempt to support some aspects of traditional C preprocessors.
Specifically:
@itemize @bullet
@item
Comments convert to nothing at all, rather than to a space. This allows
traditional token concatenation.
@item
In a preprocessing directive, the @samp{#} symbol must appear as the first
character of a line.
@item
Macro arguments are recognized within string constants in a macro
definition (and their values are stringified, though without additional
quote marks, when they appear in such a context). The preprocessor
always considers a string constant to end at a newline.
@item
@cindex detecting @w{@option{-traditional}}
The predefined macro @code{__STDC__} is not defined when you use
@option{-traditional}, but @code{__GNUC__} is (since the GNU extensions
which @code{__GNUC__} indicates are not affected by
@option{-traditional}). If you need to write header files that work
differently depending on whether @option{-traditional} is in use, by
testing both of these predefined macros you can distinguish four
situations: GNU C, traditional GNU C, other ISO C compilers, and other
old C compilers. The predefined macro @code{__STDC_VERSION__} is also
not defined when you use @option{-traditional}. @xref{Standard
Predefined,,Standard Predefined Macros,cpp.info,The C Preprocessor},
for more discussion of these and other predefined macros.
@item
@cindex string constants vs newline
@cindex newline vs string constants
The preprocessor considers a string constant to end at a newline (unless
the newline is escaped with @samp{\}). (Without @w{@option{-traditional}},
string constants can contain the newline character as typed.)
@end itemize
See the GNU CPP manual for details.
@item -fcond-mismatch
@opindex fcond-mismatch
@ -1319,8 +1282,9 @@ will still optimize based on the exception specifications.
@item -fexternal-templates
@opindex fexternal-templates
Cause template instantiations to obey @samp{#pragma interface} and
@samp{implementation}; template instances are emitted or not according
Cause @samp{#pragma interface} and @samp{implementation} to apply to
template instantiation; template instances are emitted or not according
to the location of the template definition. @xref{Template
Instantiation}, for more information.
@ -1328,8 +1292,8 @@ This option is deprecated.
@item -falt-external-templates
@opindex falt-external-templates
Similar to @option{-fexternal-templates}, but template instances are emitted or
not according to the place where they are first instantiated.
Similar to @option{-fexternal-templates}, but template instances are
emitted or not according to the place where they are first instantiated.
@xref{Template Instantiation}, for more information.
This option is deprecated.
@ -1406,9 +1370,9 @@ option are superseded by @option{-pedantic}, which works as it does for GNU C@.
@item -frepo
@opindex frepo
Enable automatic template instantiation. This option also implies
@option{-fno-implicit-templates}. @xref{Template Instantiation}, for more
information.
Enable automatic template instantiation at link time. This option also
implies @option{-fno-implicit-templates}. @xref{Template
Instantiation}, for more information.
@item -fno-rtti
@opindex fno-rtti
@ -1983,9 +1947,10 @@ this sort of problem in programs.
The present implementation of this option only works for C programs. A
future implementation may also work for C++ programs.
There is some controversy over the precise meaning of the sequence point
rules in subtle cases. Links to papers with alternative formal definitions
and other related discussions may be found on our readings page
The C 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 our readings page, at
@w{@uref{http://gcc.gnu.org/readings.html}}.
@item -Wreturn-type
@ -2889,9 +2854,8 @@ Dump after global register allocation, to @file{@var{file}.21.greg}.
@opindex dh
Dump after finalization of EH handling code, to @file{@var{file}.02.eh}.
@item o
@item o
@opindex do
Dump after post-reload CSE and other optimizations, to @file{@var{file}.22.postreload}.
Dump after post-reload optimizations, to @file{@var{file}.22.postreload}.
@item G
@opindex dG
Dump after GCSE, to @file{@var{file}.10.gcse}.
@ -2925,16 +2889,14 @@ Dump after the register move pass, to @file{@var{file}.18.regmove}.
Dump after RTL generation, to @file{@var{file}.00.rtl}.
@item R
@opindex dR
Dump after the second instruction scheduling pass, to
@file{@var{file}.27.sched2}.
Dump after the second scheduling pass, to @file{@var{file}.27.sched2}.
@item s
@opindex ds
Dump after CSE (including the jump optimization that sometimes follows
CSE), to @file{@var{file}.08.cse}.
@item S
@opindex dS
Dump after the first instruction scheduling pass, to
@file{@var{file}.19.sched}.
Dump after the first scheduling pass, to @file{@var{file}.19.sched}.
@item t
@opindex dt
Dump after the second CSE pass (including the jump optimization that
@ -2944,7 +2906,7 @@ sometimes follows CSE), to @file{@var{file}.12.cse2}.
Dump after the second flow pass, to @file{@var{file}.23.flow2}.
@item X
@opindex dX
Dump after SSA aggressive dead code elimination, to @file{@var{file}.06.ssadce}.
Dump after SSA dead code elimination, to @file{@var{file}.06.ssadce}.
@item z
@opindex dz
Dump after the peephole pass, to @file{@var{file}.24.peephole2}.
@ -3028,8 +2990,7 @@ Dump before any tree based optimization, to @file{@var{file}.original}.
@item optimized
Dump after all tree based optimization, to @file{@var{file}.optimized}.
@item inlined
Dump after inlining within the body of the function, to
@file{@var{file}.inlined}.
Dump after function inlining, to @file{@var{file}.inlined}.
@end table
@item -fpretend-float
@ -3152,19 +3113,9 @@ between statements, you can then assign a new value to any variable or
change the program counter to any other statement in the function and
get exactly the results you would expect from the source code.
Without @option{-O}, the compiler only allocates variables declared
@code{register} in registers. The resulting compiled code is a little
worse than produced by PCC without @option{-O}.
With @option{-O}, the compiler tries to reduce code size and execution
time.
When you specify @option{-O}, the compiler turns on @option{-fthread-jumps}
and @option{-fdefer-pop} on all machines. The compiler turns on
@option{-fdelayed-branch} on machines that have delay slots, and
@option{-fomit-frame-pointer} on machines that can support debugging even
without a frame pointer. On some machines the compiler also turns
on other flags.
time, without performing any optimizations that take a great deal of
compilation time.
@item -O2
@opindex O2
@ -3349,8 +3300,8 @@ performed when this option is not used.
@item -ffast-math
@opindex ffast-math
Sets @option{-fno-math-errno}, @option{-funsafe-math-optimizations},
and @option{-fno-trapping-math}.
Sets @option{-fno-math-errno}, @option{-funsafe-math-optimizations}, and @*
@option{-fno-trapping-math}.
This option causes the preprocessor macro @code{__FAST_MATH__} to be defined.
@ -3371,8 +3322,7 @@ it can result in incorrect output for programs which depend on
an exact implementation of IEEE or ISO rules/specifications for
math functions.
The default is @option{-fmath-errno}. The @option{-ffast-math} option
sets @option{-fno-math-errno}.
The default is @option{-fmath-errno}.
@item -funsafe-math-optimizations
@opindex funsafe-math-optimizations
@ -3387,8 +3337,7 @@ it can result in incorrect output for programs which depend on
an exact implementation of IEEE or ISO rules/specifications for
math functions.
The default is @option{-fno-unsafe-math-optimizations}. The
@option{-ffast-math} option sets @option{-funsafe-math-optimizations}.
The default is @option{-fno-unsafe-math-optimizations}.
@item -fno-trapping-math
@opindex fno-trapping-math
@ -3401,12 +3350,9 @@ it can result in incorrect output for programs which depend on
an exact implementation of IEEE or ISO rules/specifications for
math functions.
The default is @option{-ftrapping-math}. The @option{-ffast-math}
option sets @option{-fno-trapping-math}.
The default is @option{-ftrapping-math}.
@end table
@c following causes underfulls.. they don't look great, but we deal.
@c --mew 26jan93
The following options control specific optimizations. The @option{-O2}
option turns on all of these optimizations except @option{-funroll-loops}
and @option{-funroll-all-loops}. On most machines, the @option{-O} option
@ -3416,6 +3362,9 @@ but specific machines may handle it differently.
You can use the following flags in the rare cases when ``fine-tuning''
of optimizations to be performed is desired.
Not all of the optimizations performed by GCC have @option{-f} options
to control them.
@table @gcctabopt
@item -fstrength-reduce
@opindex fstrength-reduce
@ -3481,11 +3430,15 @@ can be changed to a load before the loop and a store after the loop.
@item -fdelete-null-pointer-checks
@opindex fdelete-null-pointer-checks
Use global dataflow analysis to identify and eliminate useless null
pointer checks. Programs which rely on NULL pointer dereferences @emph{not}
halting the program may not work properly with this option. Use
@option{-fno-delete-null-pointer-checks} to disable this optimizing for programs
which depend on that behavior.
Use global dataflow analysis to identify and eliminate useless checks
for null pointers. The compiler assumes that dereferencing a null
pointer would have halted the program. If a pointer is checked after
it has already been dereferenced, it cannot be null.
In some environments, this assumption is not true, and programs can
safely dereference null pointers. Use
@option{-fno-delete-null-pointer-checks} to disable this optimization
for programs which depend on that behavior.
@item -fexpensive-optimizations
@opindex fexpensive-optimizations
@ -3562,16 +3515,18 @@ default.
@item -funroll-loops
@opindex funroll-loops
Perform the optimization of loop unrolling. This is only done for loops
whose number of iterations can be determined at compile time or run time.
@option{-funroll-loops} implies both @option{-fstrength-reduce} and
@option{-frerun-cse-after-loop}.
Unroll loops whose number of iterations can be determined at compile
time or upon entry to the loop. @option{-funroll-loops} implies both
@option{-fstrength-reduce} and @option{-frerun-cse-after-loop}. This
option makes code larger, and may or may not make it run faster.
@item -funroll-all-loops
@opindex funroll-all-loops
Perform the optimization of loop unrolling. This is done for all loops
and usually makes programs run more slowly. @option{-funroll-all-loops}
implies @option{-fstrength-reduce} as well as @option{-frerun-cse-after-loop}.
Unroll all loops, even if their number of iterations is uncertain when
the loop is entered. This usually makes programs run more slowly.
@option{-funroll-all-loops} implies the same options as
@option{-funroll-loops},
@item -fmove-all-movables
@opindex fmove-all-movables
@ -3629,13 +3584,19 @@ exactly determine which path is taken more often.
@item -fno-guess-branch-probability
@opindex fno-guess-branch-probability
Sometimes gcc will opt to guess branch probabilities when none are
available from either profile directed feedback (@option{-fprofile-arcs})
or @samp{__builtin_expect}. In a hard real-time system, people don't
want different runs of the compiler to produce code that has different
behavior; minimizing non-determinism is of paramount import. This
switch allows users to reduce non-determinism, possibly at the expense
of inferior optimization.
Do not guess branch probabilities using a randomized model.
Sometimes gcc will opt to use a randomized model to guess branch
probabilities, when none are available from either profiling feedback
(@option{-fprofile-arcs}) or @samp{__builtin_expect}. This means that
different runs of the compiler on the same program may produce different
object code.
In a hard real-time system, people don't want different runs of the
compiler to produce code that has different behavior; minimizing
non-determinism is of paramount import. This switch allows users to
reduce non-determinism, possibly at the expense of inferior
optimization.
@item -fstrict-aliasing
@opindex fstrict-aliasing
@ -5497,11 +5458,11 @@ Set the instruction scheduling parameters for machine type
@var{cpu_type}, but do not set the instruction set or register set that the
option @option{-mcpu=@var{cpu_type}} would.
The same values for @option{-mcpu=@var{cpu_type}} are used for
@option{-mtune=@var{cpu_type}}, though the only useful values are those that
select a particular cpu implementation: @samp{cypress}, @samp{supersparc},
@samp{hypersparc}, @samp{f930}, @samp{f934}, @samp{sparclite86x},
@samp{tsc701}, @samp{ultrasparc}.
The same values for @option{-mcpu=@var{cpu_type}} can be used for
@option{-mtune=@var{cpu_type}}, but the only useful values are those
that select a particular cpu implementation. Those are @samp{cypress},
@samp{supersparc}, @samp{hypersparc}, @samp{f930}, @samp{f934},
@samp{sparclite86x}, @samp{tsc701}, and @samp{ultrasparc}.
@end table
@ -6315,15 +6276,16 @@ pointer is not eliminated when debugging information is selected by the
-g switch.
@item -moptimize-arg-area
@itemx -mno-optimize-arg-area
@opindex moptimize-arg-area
@opindex mno-optimize-arg-area
@cindex arguments in frame (88k)
Control how function arguments are stored in stack frames.
@option{-moptimize-arg-area} saves space by optimizing them, but this
conflicts with the 88open specifications. The opposite alternative,
@option{-mno-optimize-arg-area}, agrees with 88open standards. By default
GCC does not optimize the argument area.
Save space by reorganizing the stack frame. This option generates code
that does not agree with the 88open specifications, but uses less
memory.
@itemx -mno-optimize-arg-area
@opindex mno-optimize-arg-area
Do not reorganize the stack frame to save space. This is the default.
The generated conforms to the specification, but uses more memory.
@item -mshort-data-@var{num}
@opindex mshort-data
@ -6409,14 +6371,14 @@ division by zero under certain conditions. By default, when
compiling code that might be run on such a processor, GCC
generates code that explicitly checks for zero-valued divisors
and traps with exception number 503 when one is detected. Use of
mno-check-zero-division suppresses such checking for code
@option{-mno-check-zero-division} suppresses such checking for code
generated to run on an MC88100 processor.
GCC assumes that the MC88110 processor correctly detects all
instances of integer division by zero. When @option{-m88110} is
specified, both @option{-mcheck-zero-division} and
@option{-mno-check-zero-division} are ignored, and no explicit checks for
zero-valued divisors are generated.
GCC assumes that the MC88110 processor correctly detects all instances
of integer division by zero. When @option{-m88110} is specified, no
explicit checks for zero-valued divisors are generated, and both
@option{-mcheck-zero-division} and @option{-mno-check-zero-division} are
ignored.
@item -muse-div-instruction
@opindex muse-div-instruction
@ -6466,6 +6428,10 @@ language, and are often the source of portability problems. By default,
GCC issues no such warning.
@end table
@c break page here to avoid unsightly interparagraph stretch.
@c -zw, 2001-8-17
@page
@node RS/6000 and PowerPC Options
@subsection IBM RS/6000 and PowerPC Options
@cindex RS/6000 and PowerPC Options
@ -6546,13 +6512,12 @@ allow use of the MQ register; specify this for the Motorola MPC601.
@itemx -mold-mnemonics
@opindex mnew-mnemonics
@opindex mold-mnemonics
Select which mnemonics to use in the generated assembler code.
@option{-mnew-mnemonics} requests output that uses the assembler mnemonics
defined for the PowerPC architecture, while @option{-mold-mnemonics}
requests the assembler mnemonics defined for the POWER architecture.
Instructions defined in only one architecture have only one mnemonic;
GCC uses that mnemonic irrespective of which of these options is
specified.
Select which mnemonics to use in the generated assembler code. With
@option{-mnew-mnemonics}, GCC uses the assembler mnemonics defined for
the PowerPC architecture. With @option{-mold-mnemonics} it uses the
assembler mnemonics defined for the POWER architecture. Instructions
defined in only one architecture have only one mnemonic; GCC uses that
mnemonic irrespective of which of these options is specified.
GCC defaults to the mnemonics appropriate for the architecture in
use. Specifying @option{-mcpu=@var{cpu_type}} sometimes overrides the
@ -6569,54 +6534,69 @@ Supported values for @var{cpu_type} are @samp{rios}, @samp{rios1},
@samp{603}, @samp{603e}, @samp{604}, @samp{604e}, @samp{620},
@samp{630}, @samp{740}, @samp{750}, @samp{power}, @samp{power2},
@samp{powerpc}, @samp{403}, @samp{505}, @samp{801}, @samp{821},
@samp{823}, and @samp{860} and @samp{common}. @option{-mcpu=power},
@option{-mcpu=power2}, @option{-mcpu=powerpc}, and @option{-mcpu=powerpc64}
specify generic POWER, POWER2, pure 32-bit PowerPC (i.e., not MPC601),
and 64-bit PowerPC architecture machine types, with an appropriate,
generic processor model assumed for scheduling purposes.
@samp{823}, and @samp{860} and @samp{common}.
Specifying any of the following options:
@option{-mcpu=rios1}, @option{-mcpu=rios2}, @option{-mcpu=rsc},
@option{-mcpu=power}, or @option{-mcpu=power2}
enables the @option{-mpower} option and disables the @option{-mpowerpc} option;
@option{-mcpu=601} enables both the @option{-mpower} and @option{-mpowerpc} options.
All of @option{-mcpu=rs64a}, @option{-mcpu=602}, @option{-mcpu=603},
@option{-mcpu=603e}, @option{-mcpu=604}, @option{-mcpu=620}, @option{-mcpu=630},
@option{-mcpu=740}, and @option{-mcpu=750}
enable the @option{-mpowerpc} option and disable the @option{-mpower} option.
Exactly similarly, all of @option{-mcpu=403},
@option{-mcpu=505}, @option{-mcpu=821}, @option{-mcpu=860} and @option{-mcpu=powerpc}
enable the @option{-mpowerpc} option and disable the @option{-mpower} option.
@option{-mcpu=common} disables both the
@option{-mpower} and @option{-mpowerpc} options.
AIX versions 4 or greater selects @option{-mcpu=common} by default, so
that code will operate on all members of the RS/6000 POWER and PowerPC
families. In that case, GCC will use only the instructions in the
common subset of both architectures plus some special AIX common-mode
calls, and will not use the MQ register. GCC assumes a generic
@option{-mcpu=common} selects a completely generic processor. Code
generated under this option will run on any POWER or PowerPC processor.
GCC will use only the instructions in the common subset of both
architectures, and will not use the MQ register. GCC assumes a generic
processor model for scheduling purposes.
Specifying any of the options @option{-mcpu=rios1}, @option{-mcpu=rios2},
@option{-mcpu=rsc}, @option{-mcpu=power}, or @option{-mcpu=power2} also
disables the @samp{new-mnemonics} option. Specifying @option{-mcpu=601},
@option{-mcpu=602}, @option{-mcpu=603}, @option{-mcpu=603e}, @option{-mcpu=604},
@option{-mcpu=620}, @option{-mcpu=630}, @option{-mcpu=403}, @option{-mcpu=505},
@option{-mcpu=821}, @option{-mcpu=860} or @option{-mcpu=powerpc} also enables
the @samp{new-mnemonics} option.
@option{-mcpu=power}, @option{-mcpu=power2}, @option{-mcpu=powerpc}, and
@option{-mcpu=powerpc64} specify generic POWER, POWER2, pure 32-bit
PowerPC (i.e., not MPC601), and 64-bit PowerPC architecture machine
types, with an appropriate, generic processor model assumed for
scheduling purposes.
Specifying @option{-mcpu=403}, @option{-mcpu=821}, or @option{-mcpu=860} also
enables the @option{-msoft-float} option.
The other options specify a specific processor. Code generated under
those options will run best on that processor, and may not run at all on
others.
The @option{-mcpu} options automatically enable or disable other
@option{-m} options as follows:
@table @samp
@item common
@option{-mno-power}, @option{-mno-powerc}
@item power
@itemx power2
@itemx rios1
@itemx rios2
@itemx rsc
@option{-mpower}, @option{-mno-powerpc}, @option{-mno-new-mnemonics}
@item powerpc
@itemx rs64a
@itemx 602
@itemx 603
@itemx 603e
@itemx 604
@itemx 620
@itemx 630
@itemx 740
@itemx 750
@itemx 505
@option{-mno-power}, @option{-mpowerpc}, @option{-mnew-mnemonics}
@item 601
@option{-mpower}, @option{-mpowerpc}, @option{-mnew-mnemonics}
@item 403
@itemx 821
@itemx 860
@option{-mno-power}, @option{-mpowerpc}, @option{-mnew-mnemonics}, @option{-msoft-float}
@end table
@item -mtune=@var{cpu_type}
@opindex mtune
Set the instruction scheduling parameters for machine type
@var{cpu_type}, but do not set the architecture type, register usage,
choice of mnemonics like @option{-mcpu=@var{cpu_type}} would. The same
values for @var{cpu_type} are used for @option{-mtune=@var{cpu_type}} as
for @option{-mcpu=@var{cpu_type}}. The @option{-mtune=@var{cpu_type}}
option overrides the @option{-mcpu=@var{cpu_type}} option in terms of
instruction scheduling parameters.
@var{cpu_type}, but do not set the architecture type, register usage, or
choice of mnemonics, as @option{-mcpu=@var{cpu_type}} would. The same
values for @var{cpu_type} are used for @option{-mtune} as for
@option{-mcpu}. If both are specified, the code generated will use the
architecture, registers, and mnemonics set by @option{-mcpu}, but the
scheduling parameters set by @option{-mtune}.
@item -mfull-toc
@itemx -mno-fp-in-toc
@ -7405,8 +7385,9 @@ specifying @option{-march=@var{cpu-type}} implies @option{-mcpu=@var{cpu-type}}.
@opindex m486
@opindex mpentium
@opindex mpentiumpro
Synonyms for @option{-mcpu=i386}, @option{-mcpu=i486}, @option{-mcpu=pentium}, and @option{-mcpu=pentiumpro}
respectively. These synonyms are deprecated.
These options are synonyms for @option{-mcpu=i386}, @option{-mcpu=i486},
@option{-mcpu=pentium}, and @option{-mcpu=pentiumpro} respectively.
These synonyms are deprecated.
@item -mintel-syntax
@opindex mintel-syntax
@ -7488,9 +7469,9 @@ application binary interface. This is the default.
@itemx -mno-svr3-shlib
@opindex msvr3-shlib
@opindex mno-svr3-shlib
Control whether GCC places uninitialized locals into @code{bss} or
@code{data}. @option{-msvr3-shlib} places these locals into @code{bss}.
These options are meaningful only on System V Release 3.
Control whether GCC places uninitialized local variables into the
@code{bss} or @code{data} segments. @option{-msvr3-shlib} places them
into @code{bss}. These options are meaningful only on System V Release 3.
@item -mno-wide-multiply
@itemx -mwide-multiply
@ -7881,44 +7862,23 @@ 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
@emph{except} that the @var{inexact-flag} is not maintained (see below).
If this option is turned on, the CPP macro @code{_IEEE_FP} is defined
during compilation. The option is a shorthand for: @option{-D_IEEE_FP
-mfp-trap-mode=su -mtrap-precision=i -mieee-conformant}. 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
@option{-ieee_with_no_inexact}.
If this option is turned on, the preprocessor macro @code{_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 @option{-ieee_with_no_inexact}.
@item -mieee-with-inexact
@opindex mieee-with-inexact
@c overfull hbox here --bob 22 jul96
@c original text between ignore ... end ignore
@ignore
This is like @option{-mieee} except the generated code also maintains the
IEEE @var{inexact-flag}. Turning on this option causes the generated
code to implement fully-compliant IEEE math. The option is a shorthand
for @option{-D_IEEE_FP -D_IEEE_FP_INEXACT} plus @option{-mieee-conformant},
@option{-mfp-trap-mode=sui}, and @option{-mtrap-precision=i}. 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 @var{inexact-flag}, you should normally not specify this
option. Other Alpha compilers call this option
@option{-ieee_with_inexact}.
@end ignore
@c changed paragraph
This is like @option{-mieee} except the generated code also maintains the
IEEE @var{inexact-flag}. Turning on this option causes the generated
code to implement fully-compliant IEEE math. The option is a shorthand
for @option{-D_IEEE_FP -D_IEEE_FP_INEXACT} plus the three following:
@option{-mieee-conformant},
@option{-mfp-trap-mode=sui},
and @option{-mtrap-precision=i}.
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 @var{inexact-flag}, you should
This is like @option{-mieee} except the generated code also maintains
the IEEE @var{inexact-flag}. Turning on this option causes the
generated code to implement fully-compliant IEEE math. In addition to
@code{_IEEE_FP}, @code{_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 @var{inexact-flag}, you should
normally not specify this option. Other Alpha compilers call this
option @option{-ieee_with_inexact}.
@c end changes to prevent overfull hboxes
@item -mfp-trap-mode=@var{trap-mode}
@opindex mfp-trap-mode
@ -8117,8 +8077,8 @@ Produce code for a C300 Clipper processor. This is the default.
@item -mc400
@opindex mc400
Produce code for a C400 Clipper processor i.e.@: use floating point
registers f8---f15.
Produce code for a C400 Clipper processor, i.e.@: use floating point
registers f8--f15.
@end table
@node H8/300 Options
@ -9102,16 +9062,16 @@ that of some integer type.
@item -freg-struct-return
@opindex freg-struct-return
Use the convention that @code{struct} and @code{union} values are
returned in registers when possible. This is more efficient for small
structures than @option{-fpcc-struct-return}.
Return @code{struct} and @code{union} values in registers when possible.
This is more efficient for small structures than
@option{-fpcc-struct-return}.
If you specify neither @option{-fpcc-struct-return} nor its contrary
If you specify neither @option{-fpcc-struct-return} nor
@option{-freg-struct-return}, GCC defaults to whichever convention is
standard for the target. If there is no standard convention, GCC
defaults to @option{-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.
defaults to @option{-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.
@item -fshort-enums
@opindex fshort-enums
@ -9399,11 +9359,11 @@ would grow beyond the value, a signal is raised. For most targets,
the signal is raised before the stack overruns the boundary, so
it is possible to catch the signal without taking special precautions.
For instance, if the stack starts at address @samp{0x80000000} and grows
downwards you can use the flags
@samp{-fstack-limit-symbol=__stack_limit
-Wl,--defsym,__stack_limit=0x7ffe0000} which will enforce a stack
limit of 128K@.
For instance, if the stack starts at absolute address @samp{0x80000000}
and grows downwards, you can use the flags
@option{-fstack-limit-symbol=__stack_limit} and
@option{-Wl,--defsym,__stack_limit=0x7ffe0000} to enforce a stack limit
of 128KB@. Note that this may only work with the GNU linker.
@cindex aliasing of parameters
@cindex parameters, aliased
@ -9417,9 +9377,9 @@ Specify the possible relationships among parameters and between
parameters and global data.
@option{-fargument-alias} specifies that arguments (parameters) may
alias each other and may alias global storage.
alias each other and may alias global storage.@*
@option{-fargument-noalias} specifies that arguments do not alias
each other, but may alias global storage.
each other, but may alias global storage.@*
@option{-fargument-noalias-global} specifies that arguments do not
alias each other and do not alias global storage.

View File

@ -448,8 +448,6 @@ those listed in the @code{match_parallel}.
A typical use of @code{match_parallel} is to match load and store
multiple expressions, which can contain a variable number of elements
in a @code{parallel}. For example,
@c the following is *still* going over. need to change the code.
@c also need to work on grouping of this example. --mew 1feb93
@smallexample
(define_insn ""
@ -463,7 +461,7 @@ in a @code{parallel}. For example,
@end smallexample
This example comes from @file{a29k.md}. The function
@code{load_multiple_operations} is defined in @file{a29k.c} and checks
@code{load_multiple_operation} is defined in @file{a29k.c} and checks
that subsequent elements in the @code{parallel} are the same as the
@code{set} in the pattern, except that they are referencing subsequent
registers and memory locations.
@ -1295,12 +1293,12 @@ general-purpose registers respectively; @pxref{Simple Constraints}), and
@samp{I}, usually the letter indicating the most common
immediate-constant format.
For each machine architecture, the @file{config/@var{machine}.h} file
defines additional constraints. These constraints are used by the
compiler itself for instruction generation, as well as for @code{asm}
statements; therefore, some of the constraints are not particularly
interesting for @code{asm}. The constraints are defined through these
macros:
For each machine architecture, the
@file{config/@var{machine}/@var{machine}.h} file defines additional
constraints. These constraints are used by the compiler itself for
instruction generation, as well as for @code{asm} statements; therefore,
some of the constraints are not particularly interesting for @code{asm}.
The constraints are defined through these macros:
@table @code
@item REG_CLASS_FROM_LETTER
@ -2068,9 +2066,8 @@ machines explicit memory references will get optional reloads.
If a scratch register is required to move an object to or from memory,
it can be allocated using @code{gen_reg_rtx} prior to life analysis.
If there are cases needing
scratch registers after reload, you must define
@code{SECONDARY_INPUT_RELOAD_CLASS} and perhaps also
If there are cases which need scratch registers during or after reload,
you must define @code{SECONDARY_INPUT_RELOAD_CLASS} and/or
@code{SECONDARY_OUTPUT_RELOAD_CLASS} to detect them, and provide
patterns @samp{reload_in@var{m}} or @samp{reload_out@var{m}} to handle
them. @xref{Register Classes}.
@ -2947,8 +2944,8 @@ the function should return. This will normally need to copied by the
pattern to some special register or memory location.
This pattern only needs to be defined if call frame exception handling
is to be used, and simple moves to @code{EH_RETURN_STACKADJ_RTX} and
@code{EH_RETURN_HANDLER_RTX} are not sufficient.
is to be used, and simple moves involving @code{EH_RETURN_STACKADJ_RTX}
and @code{EH_RETURN_HANDLER_RTX} are not sufficient.
@cindex @code{prologue} instruction pattern
@anchor{prologue instruction pattern}
@ -3251,9 +3248,9 @@ iterations. This avoids the need for fetching and executing a
@samp{dbra}-like instruction and avoids pipeline stalls associated with
the jump.
GCC has three special named patterns to support low overhead looping,
@samp{decrement_and_branch_until_zero}, @samp{doloop_begin}, and
@samp{doloop_end}. The first pattern,
GCC has three special named patterns to support low overhead looping.
They are @samp{decrement_and_branch_until_zero}, @samp{doloop_begin},
and @samp{doloop_end}. The first pattern,
@samp{decrement_and_branch_until_zero}, is not emitted during RTL
generation but may be emitted during the instruction combination phase.
This requires the assistance of the loop optimizer, using information
@ -3888,7 +3885,8 @@ from i386.md:
"TARGET_ZERO_EXTEND_WITH_AND && !optimize_size"
"#"
"&& reload_completed"
[(parallel [(set (match_dup 0) (and:SI (match_dup 0) (const_int 65535)))
[(parallel [(set (match_dup 0)
(and:SI (match_dup 0) (const_int 65535)))
(clobber (reg:CC 17))])]
""
[(set_attr "type" "alu1")])
@ -4749,9 +4747,10 @@ as follows:
return (get_attr_length (insn) == 4
? "b %l0" : "l r15,=a(%l0); br r15");
@}
[(set (attr "length") (if_then_else (lt (match_dup 0) (const_int 4096))
(const_int 4)
(const_int 6)))])
[(set (attr "length")
(if_then_else (lt (match_dup 0) (const_int 4096))
(const_int 4)
(const_int 6)))])
@end smallexample
@node Constant Attributes

View File

@ -1527,8 +1527,8 @@ than the operands. Write the pattern for this as
where @var{m} is wider than the modes of @var{x} and @var{y}, which need
not be the same.
Write patterns for unsigned widening multiplication similarly using
@code{zero_extend}.
For unsigned widening multiplication, use the same idiom, but with
@code{zero_extend} instead of @code{sign_extend}.
@findex div
@cindex division
@ -2169,7 +2169,8 @@ either wrap around or use saturating addition depending on the value
of a special control register:
@example
(parallel [(set (reg:SI 2) (unspec:SI [(reg:SI 3) (reg:SI 4)] 0))
(parallel [(set (reg:SI 2) (unspec:SI [(reg:SI 3)
(reg:SI 4)] 0))
(use (reg:SI 1))])
@end example