The following expressions have unpredictable results:
+
+ x[i]=++i
+ foo(i,++i)
+ i*(++i) /* special case with foo=="operator*" */
+ std::cout << i << ++i /* foo(foo(std::cout,i),++i) */
+
+
since the i without increment can be evaluated before or
+ after ++i.
+
+
The C and C++ standards have the notion of "sequence points". Everything
+ that happens between two sequence points happens in an unspecified order,
+ but it has to happen after the first and before the second sequence point.
+ The end of a statement and a function call are examples for sequence points,
+ whereas assignments and the comma between function arguments are not.
+
+
Modifying a value twice between two sequence points as shown in the
+ following examples is even worse:
+
+ i=++i
+ foo(++i,++i)
+ (++i)*(++i) /* special case with foo=="operator*" */
+ std::cout << ++i << ++i /* foo(foo(std::cout,++i),++i) */
+
+
This leads to undefined behavior (i.e. the compiler can do
+ anything).
+
+
Casting does not work as expected when optimization is turned on.
This is often caused by a violation of aliasing rules, which are part
diff -Nrc3pad gcc-3.3.4/ChangeLog gcc-3.3.5/ChangeLog
*** gcc-3.3.4/ChangeLog 2004-05-31 22:33:06.000000000 +0000
--- gcc-3.3.5/ChangeLog 2004-09-30 16:47:59.000000000 +0000
***************
*** 1,3 ****
--- 1,11 ----
+ 2004-09-30 Release Manager
+
+ * GCC 3.3.5 Released.
+
+ 2004-07-30 Matthias Klose
+
+ * configure: Add missing 'action' argument to trap.
+
2004-05-31 Release Manager
* GCC 3.3.4 Released.
diff -Nrc3pad gcc-3.3.4/config/ChangeLog gcc-3.3.5/config/ChangeLog
*** gcc-3.3.4/config/ChangeLog 2004-05-31 22:33:18.000000000 +0000
--- gcc-3.3.5/config/ChangeLog 2004-09-30 16:47:37.000000000 +0000
***************
*** 1,3 ****
--- 1,7 ----
+ 2004-09-30 Release Manager
+
+ * GCC 3.3.5 Released.
+
2004-05-31 Release Manager
* GCC 3.3.4 Released.
diff -Nrc3pad gcc-3.3.4/configure gcc-3.3.5/configure
*** gcc-3.3.4/configure 2002-09-29 16:11:24.000000000 +0000
--- gcc-3.3.5/configure 2004-07-30 19:08:17.000000000 +0000
*************** subdirs=
*** 89,95 ****
target_alias=NOTARGET
target_makefile_frag=
undefs=NOUNDEFS
! version="$Revision: 1.49 $"
x11=default
bindir='${exec_prefix}/bin'
sbindir='${exec_prefix}/sbin'
--- 89,95 ----
target_alias=NOTARGET
target_makefile_frag=
undefs=NOUNDEFS
! version="$Revision: 1.49.4.1 $"
x11=default
bindir='${exec_prefix}/bin'
sbindir='${exec_prefix}/sbin'
*************** fi
*** 697,703 ****
if test -f skip-this-dir; then
# Perform the same cleanup as the trap handler, minus the "exit 1" of course,
# and reset the trap handler.
! trap 0
rm -rf Makefile* ${tmpdir}
# Execute the final clean-up actions
${config_shell} skip-this-dir
--- 697,703 ----
if test -f skip-this-dir; then
# Perform the same cleanup as the trap handler, minus the "exit 1" of course,
# and reset the trap handler.
! trap '' 0
rm -rf Makefile* ${tmpdir}
# Execute the final clean-up actions
${config_shell} skip-this-dir
*************** fi
*** 1596,1602 ****
# Perform the same cleanup as the trap handler, minus the "exit 1" of course,
# and reset the trap handler.
rm -rf ${tmpdir}
! trap 0
exit 0
--- 1596,1602 ----
# Perform the same cleanup as the trap handler, minus the "exit 1" of course,
# and reset the trap handler.
rm -rf ${tmpdir}
! trap '' 0
exit 0
diff -Nrc3pad gcc-3.3.4/contrib/ChangeLog gcc-3.3.5/contrib/ChangeLog
*** gcc-3.3.4/contrib/ChangeLog 2004-05-31 22:33:26.000000000 +0000
--- gcc-3.3.5/contrib/ChangeLog 2004-09-30 16:46:32.000000000 +0000
***************
*** 1,3 ****
--- 1,16 ----
+ 2004-09-30 Release Manager
+
+ * GCC 3.3.5 Released.
+
+ 2004-08-26 Matthias Klose
+
+ * texi2pod.pl: keep references of the form @ref{...}, print them bold.
+
+ 2003-08-26 Matthias Klose
+
+ * test_summary: Include baseline used for libstdc++-v3 abi check
+ in test summary.
+
2004-05-31 Release Manager
* GCC 3.3.4 Released.
diff -Nrc3pad gcc-3.3.4/contrib/regression/ChangeLog gcc-3.3.5/contrib/regression/ChangeLog
*** gcc-3.3.4/contrib/regression/ChangeLog 2004-05-31 22:33:33.000000000 +0000
--- gcc-3.3.5/contrib/regression/ChangeLog 2004-09-30 16:46:20.000000000 +0000
***************
*** 1,3 ****
--- 1,7 ----
+ 2004-09-30 Release Manager
+
+ * GCC 3.3.5 Released.
+
2004-05-31 Release Manager
* GCC 3.3.4 Released.
diff -Nrc3pad gcc-3.3.4/contrib/test_summary gcc-3.3.5/contrib/test_summary
*** gcc-3.3.4/contrib/test_summary 2002-05-16 17:41:58.000000000 +0000
--- gcc-3.3.5/contrib/test_summary 2004-08-26 05:50:23.000000000 +0000
*************** $2 == "version" { save = $0; $1 = ""; $2
*** 116,121 ****
--- 116,122 ----
/\===.*Summary/ { print ""; print; blanks=1; }
/tests ===/ || /^(Target|Host|Native)/ || $2 == "version" { print; blanks=1; }
/^(XPASS|FAIL|UNRESOLVED|WARNING|ERROR|# of )/ { print; }
+ /^using:/ { print ""; print; print ""; }
# dumpall != 0 && /^X?(PASS|FAIL|UNTESTED)|^testcase/ { dumpall=0; }
# dumpall != 0 { print; }
# /^FAIL/ { dumpall=1; }
diff -Nrc3pad gcc-3.3.4/contrib/texi2pod.pl gcc-3.3.5/contrib/texi2pod.pl
*** gcc-3.3.4/contrib/texi2pod.pl 2002-12-28 20:51:38.000000000 +0000
--- gcc-3.3.5/contrib/texi2pod.pl 2004-08-26 21:21:17.000000000 +0000
*************** sub postprocess
*** 345,350 ****
--- 345,353 ----
s/\@w\{([^\}]*)\}/S<$1>/g;
s/\@(?:dmn|math)\{([^\}]*)\}/$1/g;
+ # keep references of the form @ref{...}, print them bold
+ s/\@(?:ref)\{([^\}]*)\}/B<$1>/g;
+
# Cross references are thrown away, as are @noindent and @refill.
# (@noindent is impossible in .pod, and @refill is unnecessary.)
# @* is also impossible in .pod; we discard it and any newline that
diff -Nrc3pad gcc-3.3.4/FAQ gcc-3.3.5/FAQ
*** gcc-3.3.4/FAQ 2004-05-31 21:44:58.000000000 +0000
--- gcc-3.3.5/FAQ 2004-09-30 17:34:24.000000000 +0000
*************** dynamic_cast, throw, typeid don't work w
*** 415,421 ****
The new C++ ABI in the GCC 3.0 series uses address comparisons, rather
than string compares, to determine type equality. This leads to better
performance. Like other objects that have to be present in the final
! executable, these std::typeinfo_t objects have what is called vague
linkage because they are not tightly bound to any one particular
translation unit (object file). The compiler has to emit them in any
translation unit that requires their presence, and then rely on the
--- 415,421 ----
The new C++ ABI in the GCC 3.0 series uses address comparisons, rather
than string compares, to determine type equality. This leads to better
performance. Like other objects that have to be present in the final
! executable, these std::type_info objects have what is called vague
linkage because they are not tightly bound to any one particular
translation unit (object file). The compiler has to emit them in any
translation unit that requires their presence, and then rely on the
*************** dynamic_cast, throw, typeid don't work w
*** 426,432 ****
a shared library are resolved against objects in the executable and
other shared libraries.
* For a program which is linked against a shared library, no
! additional precautions need taking.
* You cannot create a shared library with the "-Bsymbolic" option,
as that prevents the resolution described above.
* If you use dlopen to explicitly load code from a shared library,
--- 426,432 ----
a shared library are resolved against objects in the executable and
other shared libraries.
* For a program which is linked against a shared library, no
! additional precautions are needed.
* You cannot create a shared library with the "-Bsymbolic" option,
as that prevents the resolution described above.
* If you use dlopen to explicitly load code from a shared library,
*************** dynamic_cast, throw, typeid don't work w
*** 455,461 ****
For more details about the way that GCC implements these and other C++
features, please read the [40]ABI specification. Note the
! std::typeinfo_t objects which must be resolved all begin with "_ZTS".
Refer to ld's documentation for a description of the "-E" &
"-Bsymbolic" flags.
_________________________________________________________________
--- 455,461 ----
For more details about the way that GCC implements these and other C++
features, please read the [40]ABI specification. Note the
! std::type_info objects which must be resolved all begin with "_ZTS".
Refer to ld's documentation for a description of the "-E" &
"-Bsymbolic" flags.
_________________________________________________________________
diff -Nrc3pad gcc-3.3.4/faq.html gcc-3.3.5/faq.html
*** gcc-3.3.4/faq.html 2004-05-31 21:44:57.000000000 +0000
--- gcc-3.3.5/faq.html 2004-09-30 17:34:24.000000000 +0000
*************** final version of the Standard, it is.
The new C++ ABI in the GCC 3.0 series uses address comparisons,
rather than string compares, to determine type equality. This leads
to better performance. Like other objects that have to be present in the
! final executable, these std::typeinfo_t objects have what
is called vague linkage because they are not tightly bound to any one
particular translation unit (object file). The compiler has to emit
them in any translation unit that requires their presence, and then
--- 491,497 ----
The new C++ ABI in the GCC 3.0 series uses address comparisons,
rather than string compares, to determine type equality. This leads
to better performance. Like other objects that have to be present in the
! final executable, these std::type_info objects have what
is called vague linkage because they are not tightly bound to any one
particular translation unit (object file). The compiler has to emit
them in any translation unit that requires their presence, and then
*************** executable and other shared libraries.
*** 504,510 ****
For a program which is linked against a shared library, no additional
! precautions need taking.
You cannot create a shared library with the "-Bsymbolic"
option, as that prevents the resolution described above.
--- 504,510 ----
For a program which is linked against a shared library, no additional
! precautions are needed.
You cannot create a shared library with the "-Bsymbolic"
option, as that prevents the resolution described above.
*************** linkage the same name is a violation of
*** 539,545 ****
For more details about the way that GCC implements these and other
C++ features, please read the ABI specification.
! Note the std::typeinfo_t objects which must be
resolved all begin with "_ZTS". Refer to ld's
documentation for a description of the "-E" &
"-Bsymbolic" flags.
--- 539,545 ----
For more details about the way that GCC implements these and other
C++ features, please read the ABI specification.
! Note the std::type_info objects which must be
resolved all begin with "_ZTS". Refer to ld's
documentation for a description of the "-E" &
"-Bsymbolic" flags.
diff -Nrc3pad gcc-3.3.4/gcc/builtins.c gcc-3.3.5/gcc/builtins.c
*** gcc-3.3.4/gcc/builtins.c 2004-01-11 19:13:03.000000000 +0000
--- gcc-3.3.5/gcc/builtins.c 2004-08-03 20:06:45.000000000 +0000
*************** expand_builtin_memcmp (exp, arglist, tar
*** 2418,2424 ****
return expand_expr (result, target, mode, EXPAND_NORMAL);
}
! #ifdef HAVE_cmpstrsi
{
rtx arg1_rtx, arg2_rtx, arg3_rtx;
rtx result;
--- 2418,2424 ----
return expand_expr (result, target, mode, EXPAND_NORMAL);
}
! #if defined HAVE_cmpmemsi || defined HAVE_cmpstrsi
{
rtx arg1_rtx, arg2_rtx, arg3_rtx;
rtx result;
*************** expand_builtin_memcmp (exp, arglist, tar
*** 2428,2435 ****
= get_pointer_alignment (arg1, BIGGEST_ALIGNMENT) / BITS_PER_UNIT;
int arg2_align
= get_pointer_alignment (arg2, BIGGEST_ALIGNMENT) / BITS_PER_UNIT;
! enum machine_mode insn_mode
! = insn_data[(int) CODE_FOR_cmpstrsi].operand[0].mode;
/* If we don't have POINTER_TYPE, call the function. */
if (arg1_align == 0 || arg2_align == 0)
--- 2428,2446 ----
= get_pointer_alignment (arg1, BIGGEST_ALIGNMENT) / BITS_PER_UNIT;
int arg2_align
= get_pointer_alignment (arg2, BIGGEST_ALIGNMENT) / BITS_PER_UNIT;
! enum machine_mode insn_mode;
!
! #ifdef HAVE_cmpmemsi
! if (HAVE_cmpmemsi)
! insn_mode = insn_data[(int) CODE_FOR_cmpmemsi].operand[0].mode;
! else
! #endif
! #ifdef HAVE_cmpstrsi
! if (HAVE_cmpstrsi)
! insn_mode = insn_data[(int) CODE_FOR_cmpstrsi].operand[0].mode;
! else
! #endif
! return 0;
/* If we don't have POINTER_TYPE, call the function. */
if (arg1_align == 0 || arg2_align == 0)
*************** expand_builtin_memcmp (exp, arglist, tar
*** 2445,2455 ****
arg1_rtx = get_memory_rtx (arg1);
arg2_rtx = get_memory_rtx (arg2);
arg3_rtx = expand_expr (len, NULL_RTX, VOIDmode, 0);
! if (!HAVE_cmpstrsi)
! insn = NULL_RTX;
else
insn = gen_cmpstrsi (result, arg1_rtx, arg2_rtx, arg3_rtx,
GEN_INT (MIN (arg1_align, arg2_align)));
if (insn)
emit_insn (insn);
--- 2456,2474 ----
arg1_rtx = get_memory_rtx (arg1);
arg2_rtx = get_memory_rtx (arg2);
arg3_rtx = expand_expr (len, NULL_RTX, VOIDmode, 0);
! #ifdef HAVE_cmpmemsi
! if (HAVE_cmpmemsi)
! insn = gen_cmpmemsi (result, arg1_rtx, arg2_rtx, arg3_rtx,
! GEN_INT (MIN (arg1_align, arg2_align)));
else
+ #endif
+ #ifdef HAVE_cmpstrsi
+ if (HAVE_cmpstrsi)
insn = gen_cmpstrsi (result, arg1_rtx, arg2_rtx, arg3_rtx,
GEN_INT (MIN (arg1_align, arg2_align)));
+ else
+ #endif
+ abort ();
if (insn)
emit_insn (insn);
diff -Nrc3pad gcc-3.3.4/gcc/ChangeLog gcc-3.3.5/gcc/ChangeLog
*** gcc-3.3.4/gcc/ChangeLog 2004-05-31 22:34:09.000000000 +0000
--- gcc-3.3.5/gcc/ChangeLog 2004-09-30 16:45:01.000000000 +0000
***************
*** 1,3 ****
--- 1,226 ----
+ 2004-09-30 Release Manager
+
+ * GCC 3.3.5 Released.
+
+ 2004-09-20 Roger Sayle
+
+ PR rtl-optimization/17363
+ Backport from mainline
+ 2003-07-19 Zdenek Dvorak
+
+ PR bootstrap/11593
+ * sched-rgn.c (find_rgns): Initialize current_edge correctly.
+
+ 2004-09-17 James E Wilson
+
+ PR target/17455
+ * config/ia64/ia64.c (ia64_function_ok_for_sibcall): Return false
+ if current_function_decl is a sibcall.
+
+ 2004-09-13 Richard Henderson
+
+ PR inline-asm/6806
+ * cselib.c (cselib_invalidate_rtx): Export. Remove unused args.
+ (cselib_invalidate_rtx_note_stores): New.
+ (cselib_record_sets, cselib_process_insn): Update to match.
+ * cselib.h (cselib_invalidate_rtx): Declare.
+ * reload1.c (reload_cse_simplify): Invalidate asm clobbers.
+
+ 2004-08-29 Jonathan Wakely
+
+ * doc/trouble.texi (C++ misunderstandings): Fix example code.
+
+ 2004-08-26 Richard Henderson
+
+ PR target/15718
+ * config/alpha/alpha.h (HARD_REGNO_MODE_OK): Allow complex float
+ modes.
+
+ 2004-08-26 Matthias Klose
+
+ * doc/invoke.texi: Remove duplicate -fbranch-probabilities entry.
+
+ 2004-08-14 Roger Sayle
+
+ * fixinc/tests/base/obstack.h: Backport from mainline.
+
+ 2004-08-14 Roger Sayle
+ David Billinghurst
+
+ PR libgfortran/15930
+ * fixinc/inclhack.def (irix___generic1, irix___generic2): New.
+ * fixinc/fixincl.x: Regenerate.
+ * fixinc/tests/base/internal/math_core.h: New file
+
+ 2004-08-08 Roger Sayle
+
+ PR middle-end/16790
+ * fold-const.c (expand_muldiv_1) : Disallow local
+ truncations, not just global truncations.
+
+ 2004-08-02 Ulrich Weigand
+
+ Backport from mainline:
+ 2003-07-11 Jakub Jelinek
+ * optabs.c (prepare_cmp_insn): Try cmpmemM first if it exists,
+ then fall back to cmpstrM.
+ * builtins.c (expand_builtin_memcmp): Likewise.
+ * config/s390/s390-protos.h (s390_expand_cmpstr): Rename to...
+ (s390_expand_cmpmem): ... this.
+ * config/s390/s390.md (cmpmemdi, cmpmemsi, cmpmem_short_64,
+ cmpmem_short_31, cmpmem_long_64, cmpmem_long_31): Renamed
+ from cmpstr* patterns. Rename call to s390_expand_cmpstr
+ to s390_expand_cmpmem.
+ * config/s390/s390.c (s390_expand_cmpstr): Rename to...
+ (s390_expand_cmpstr): ... this. Rename cmpstr* instructions
+ to cmpmem*.
+ * config/i370/i370.md (cmpmemsi, cmpmemsi_1): Renamed from
+ cmpstr* patterns.
+ * doc/md.texi (cmpstrM): Describe as String compare insn, not
+ Block compare insn.
+ (cmpmemM): Add.
+
+ 2004-07-25 Andreas Jaeger
+
+ Backport from mainline:
+ * libgcc-std.ver: Add __unorddf2 and __unordsf2 with version 3.3.4.
+
+ 2004-07-25 Kaz Kojima
+
+ PR target/13250
+ Backport from mainline:
+ * config/sh/sh.md (rotlsi3): Use emit_move_insn.
+
+ PR target/15647
+ Backport from mainline:
+ * config/sh/t-linux (SHLIB_MAPFILES): Use sh specific
+ libgcc-std.ver.
+ * config/sh/libgcc-std.ver: New file.
+
+ 2004-07-25 John David Anglin
+
+ PR target/15202
+ * pa.md (movdi, movsi, movhi, movqi): Support move from shift amount
+ register to general register for DI, SI, HI and QI modes. Remove
+ move to shift amount register in DF mode.
+
+ PR rtl-optimization/14782
+ * pa.c (emit_move_sequence): Use SFmode for 4-byte modes when doing
+ the address checks for secondary reloads for loads from and stores
+ to floating-point registers.
+ * pa.h (EXTRA_CONSTRAINT, case T): Use SFmode for 4-byte modes
+ in the address check. Move work around for ELF32 targets to
+ GO_IF_LEGITIMATE_ADDRESS.
+ (GO_IF_LEGITIMATE_ADDRESS): Require constant offsets to be
+ correctly aligned for DImode loads and stores. Don't allow long
+ SFmode displacements on ELF32.
+
+ 2004-07-25 Matthias Klose
+
+ Backport:
+ PR rtl-optimization/14700
+
+ 2004-06-24 Eric Christopher
+
+ * combine.c (distribute_notes): Don't delete sets to
+ global register variables.
+
+ 2004-06-29 Zack Weinberg
+
+ * combine.c (distribute_notes): Don't look at global_regs for
+ pseudos.
+
+ 2004-07-23 James E Wilson
+
+ PR target/16559
+ * ia64.c (ia64_expand_load_address): For CONST, replace
+ gen_load_symptr call with recursive call.
+
+ 2004-07-17 Eric Botcazou
+
+ Backport from mainline:
+ 2004-07-13 Eric Botcazou
+
+ PR target/13926
+ * config/sparc/sparc-protos.h (output_ubranch): New prototype.
+ * config/sparc/sparc.c (output_ubranch): New function.
+ * config/sparc/sparc.md (jump pattern): Use it.
+
+ 2004-07-13 Eric Botcazou
+
+ PR target/16494
+ * config/sparc/sparc.c (output_cbranch): Properly guard
+ the code handling far branches with TARGET_V9.
+ * config/sparc/sparc.md (length attribute): Document the
+ side-effect of having a length greater or equal to 3.
+
+ 2004-07-13 Eric Botcazou
+ Lloyd Parkes
+
+ PR target/15186
+ * config/sparc/sol2-bi.h (LINK_ARCH64_SPEC_BASE): Pass
+ /usr/ucblib/sparcv9 as -R path when -compat-bsd is specified.
+
+ 2004-07-13 Eric Botcazou
+ Martin Sebor
+
+ PR target/12602
+ * doc/invoke.texi (SPARC options): Document -threads
+ and -pthreads on Solaris.
+
+ 2004-07-12 Eric Botcazou
+
+ * config/sparc/sol2-bi.h: Handle TARGET_CPU_ultrasparc3.
+ (CPP_CPU_SPEC): Handle -mcpu=ultrasparc3.
+ (ASM_CPU_SPEC): Likewise
+ * config/sparc/sol2.h: Handle TARGET_CPU_ultrasparc3.
+ (ASM_CPU_SPEC): Handle -mcpu=ultrasparc3.
+
+ 2004-07-10 John David Anglin
+
+ * pa.c (output_indirect_call): Only use %r2 as the link register in
+ indirect calls with the long PA 2.0 pc-relative branch.
+
+ PR target/16459
+ * pa.c (output_indirect_call): Use %r2 as the link register when
+ calling $$dyncall with a pc-relative branch.
+
+ 2004-07-07 Andreas Schwab
+
+ * config/ia64/ia64.md: Define new attribute "empty".
+ (prologue_use, nop_x, insn_group_barrier): Set it.
+
+ * config/ia64/ia64.c (ia64_reorg): When looking for trailing call
+ skip over "empty" insns.
+
+ 2004-07-04 Gerald Pfeifer
+
+ * doc/contrib.texi (Contributors): Adjust link for GNU Classpath.
+
+ 2004-06-30 John David Anglin
+
+ * pa.c (emit_move_sequence): Fix loading of non 14-bit CONST operands
+ when generating PIC code.
+
+ 2004-06-28 Josef Zlomek
+
+ PR c/15549
+ Backport from mainline
+ 2003-08-19 Mark Mitchell
+
+ PR c++/11946
+ * convert.c (convert_to_integer): Use CONVERT_EXPR (instead of
+ NOP_EXPR) when necessary.
+
+ 2004-06-17 Ian Lance Taylor
+
+ PR middle-end/16038
+ Backport from mainline:
+ Fri Apr 4 17:43:52 2003 Olivier Hainque
+
+ * emit-rtl.c (get_mem_attrs): Adjust alignment tests determining
+ use of default attributes to agree MEM_ALIGN macro.
+
2004-05-31 Release Manager
* GCC 3.3.4 Released.
diff -Nrc3pad gcc-3.3.4/gcc/combine.c gcc-3.3.5/gcc/combine.c
*** gcc-3.3.4/gcc/combine.c 2004-01-23 20:42:48.000000000 +0000
--- gcc-3.3.5/gcc/combine.c 2004-07-25 18:49:54.000000000 +0000
*************** distribute_notes (notes, from_insn, i3,
*** 12798,12805 ****
/* If the register is being set at TEM, see if that is all
TEM is doing. If so, delete TEM. Otherwise, make this
! into a REG_UNUSED note instead. */
! if (reg_set_p (XEXP (note, 0), PATTERN (tem)))
{
rtx set = single_set (tem);
rtx inner_dest = 0;
--- 12798,12808 ----
/* If the register is being set at TEM, see if that is all
TEM is doing. If so, delete TEM. Otherwise, make this
! into a REG_UNUSED note instead. Don't delete sets to
! global register vars. */
! if ((REGNO (XEXP (note, 0)) >= FIRST_PSEUDO_REGISTER
! || !global_regs[REGNO (XEXP (note, 0))])
! && reg_set_p (XEXP (note, 0), PATTERN (tem)))
{
rtx set = single_set (tem);
rtx inner_dest = 0;
diff -Nrc3pad gcc-3.3.4/gcc/config/alpha/alpha.h gcc-3.3.5/gcc/config/alpha/alpha.h
*** gcc-3.3.4/gcc/config/alpha/alpha.h 2004-05-28 00:02:03.000000000 +0000
--- gcc-3.3.5/gcc/config/alpha/alpha.h 2004-08-27 00:01:15.000000000 +0000
*************** extern const char *alpha_tls_size_string
*** 647,652 ****
--- 647,653 ----
#define HARD_REGNO_MODE_OK(REGNO, MODE) \
((REGNO) >= 32 && (REGNO) <= 62 \
? (MODE) == SFmode || (MODE) == DFmode || (MODE) == DImode \
+ || (MODE) == SCmode || (MODE) == DCmode \
: 1)
/* Value is 1 if MODE is a supported vector mode. */
diff -Nrc3pad gcc-3.3.4/gcc/config/i370/i370.md gcc-3.3.5/gcc/config/i370/i370.md
*** gcc-3.3.4/gcc/config/i370/i370.md 2002-01-20 23:48:11.000000000 +0000
--- gcc-3.3.5/gcc/config/i370/i370.md 2004-08-03 20:06:47.000000000 +0000
*************** check_label_emit ();
*** 474,483 ****
)
;
! ; cmpstrsi instruction pattern(s).
;
! (define_expand "cmpstrsi"
[(set (match_operand:SI 0 "general_operand" "")
(compare (match_operand:BLK 1 "general_operand" "")
(match_operand:BLK 2 "general_operand" "")))
--- 474,483 ----
)
;
! ; cmpmemsi instruction pattern(s).
;
! (define_expand "cmpmemsi"
[(set (match_operand:SI 0 "general_operand" "")
(compare (match_operand:BLK 1 "general_operand" "")
(match_operand:BLK 2 "general_operand" "")))
*************** check_label_emit ();
*** 545,551 ****
emit_move_insn (gen_rtx_SUBREG (SImode, reg2, GET_MODE_SIZE (SImode)), len);
/* Compare! */
! emit_insn (gen_cmpstrsi_1 (result, reg1, reg2));
}
DONE;
}")
--- 545,551 ----
emit_move_insn (gen_rtx_SUBREG (SImode, reg2, GET_MODE_SIZE (SImode)), len);
/* Compare! */
! emit_insn (gen_cmpmemsi_1 (result, reg1, reg2));
}
DONE;
}")
*************** check_label_emit ();
*** 569,575 ****
; Compare a block that is larger than 255 bytes in length.
! (define_insn "cmpstrsi_1"
[(set (match_operand:SI 0 "register_operand" "+d")
(compare
(mem:BLK (subreg:SI (match_operand:DI 1 "register_operand" "+d") 0))
--- 569,575 ----
; Compare a block that is larger than 255 bytes in length.
! (define_insn "cmpmemsi_1"
[(set (match_operand:SI 0 "register_operand" "+d")
(compare
(mem:BLK (subreg:SI (match_operand:DI 1 "register_operand" "+d") 0))
diff -Nrc3pad gcc-3.3.4/gcc/config/ia64/ia64.c gcc-3.3.5/gcc/config/ia64/ia64.c
*** gcc-3.3.4/gcc/config/ia64/ia64.c 2003-12-31 23:45:39.000000000 +0000
--- gcc-3.3.5/gcc/config/ia64/ia64.c 2004-09-17 17:56:32.000000000 +0000
*************** ia64_expand_load_address (dest, src, scr
*** 1086,1093 ****
if (! scratch)
scratch = no_new_pseudos ? subtarget : gen_reg_rtx (DImode);
! emit_insn (gen_load_symptr (subtarget, plus_constant (sym, hi),
! scratch));
emit_insn (gen_adddi3 (temp, subtarget, GEN_INT (lo)));
}
else
--- 1086,1092 ----
if (! scratch)
scratch = no_new_pseudos ? subtarget : gen_reg_rtx (DImode);
! ia64_expand_load_address (subtarget, plus_constant (sym, hi), scratch);
emit_insn (gen_adddi3 (temp, subtarget, GEN_INT (lo)));
}
else
*************** ia64_reorg (insns)
*** 7175,7185 ****
insn = get_last_insn ();
if (! INSN_P (insn))
insn = prev_active_insn (insn);
! if (GET_CODE (insn) == INSN
! && GET_CODE (PATTERN (insn)) == UNSPEC_VOLATILE
! && XINT (PATTERN (insn), 1) == UNSPECV_INSN_GROUP_BARRIER)
! {
! saw_stop = 1;
insn = prev_active_insn (insn);
}
if (GET_CODE (insn) == CALL_INSN)
--- 7174,7185 ----
insn = get_last_insn ();
if (! INSN_P (insn))
insn = prev_active_insn (insn);
! /* Skip over insns that expand to nothing. */
! while (GET_CODE (insn) == INSN && get_attr_empty (insn) == EMPTY_YES)
! {
! if (GET_CODE (PATTERN (insn)) == UNSPEC_VOLATILE
! && XINT (PATTERN (insn), 1) == UNSPECV_INSN_GROUP_BARRIER)
! saw_stop = 1;
insn = prev_active_insn (insn);
}
if (GET_CODE (insn) == CALL_INSN)
*************** bool
*** 7394,7399 ****
--- 7394,7405 ----
ia64_function_ok_for_sibcall (decl)
tree decl;
{
+ /* We can't perform a sibcall if the current function has the syscall_linkage
+ attribute. */
+ if (lookup_attribute ("syscall_linkage",
+ TYPE_ATTRIBUTES (TREE_TYPE (current_function_decl))))
+ return false;
+
/* We must always return with our current GP. This means we can
only sibcall to functions defined in the current module. */
return decl && (*targetm.binds_local_p) (decl);
diff -Nrc3pad gcc-3.3.4/gcc/config/ia64/ia64.md gcc-3.3.5/gcc/config/ia64/ia64.md
*** gcc-3.3.4/gcc/config/ia64/ia64.md 2003-12-16 23:55:19.000000000 +0000
--- gcc-3.3.5/gcc/config/ia64/ia64.md 2004-07-07 15:32:28.000000000 +0000
***************
*** 147,152 ****
--- 147,156 ----
(define_attr "predicable" "no,yes" (const_string "yes"))
+ ;; Empty. True iff this insn does not generate any code.
+
+ (define_attr "empty" "no,yes" (const_string "no"))
+
;; ::::::::::::::::::::
;; ::
***************
*** 5062,5068 ****
""
""
[(set_attr "itanium_class" "ignore")
! (set_attr "predicable" "no")])
;; Allocate a new register frame.
--- 5066,5073 ----
""
""
[(set_attr "itanium_class" "ignore")
! (set_attr "predicable" "no")
! (set_attr "empty" "yes")])
;; Allocate a new register frame.
***************
*** 5229,5235 ****
[(const_int 5)]
""
""
! [(set_attr "itanium_class" "nop_x")])
(define_insn "bundle_selector"
[(unspec [(match_operand 0 "const_int_operand" "")] UNSPEC_BUNDLE_SELECTOR)]
--- 5234,5241 ----
[(const_int 5)]
""
""
! [(set_attr "itanium_class" "nop_x")
! (set_attr "empty" "yes")])
(define_insn "bundle_selector"
[(unspec [(match_operand 0 "const_int_operand" "")] UNSPEC_BUNDLE_SELECTOR)]
***************
*** 5253,5259 ****
""
";;"
[(set_attr "itanium_class" "stop_bit")
! (set_attr "predicable" "no")])
(define_expand "trap"
[(trap_if (const_int 1) (const_int 0))]
--- 5259,5266 ----
""
";;"
[(set_attr "itanium_class" "stop_bit")
! (set_attr "predicable" "no")
! (set_attr "empty" "yes")])
(define_expand "trap"
[(trap_if (const_int 1) (const_int 0))]
diff -Nrc3pad gcc-3.3.4/gcc/config/pa/pa.c gcc-3.3.5/gcc/config/pa/pa.c
*** gcc-3.3.4/gcc/config/pa/pa.c 2003-09-26 20:22:16.000000000 +0000
--- gcc-3.3.5/gcc/config/pa/pa.c 2004-07-25 18:53:31.000000000 +0000
*************** emit_move_sequence (operands, mode, scra
*** 1401,1414 ****
operand1 = gen_rtx_MEM (GET_MODE (operand1), tem);
/* Handle secondary reloads for loads/stores of FP registers from
! REG+D addresses where D does not fit in 5 bits, including
(subreg (mem (addr))) cases. */
if (fp_reg_operand (operand0, mode)
&& ((GET_CODE (operand1) == MEM
! && ! memory_address_p (DFmode, XEXP (operand1, 0)))
|| ((GET_CODE (operand1) == SUBREG
&& GET_CODE (XEXP (operand1, 0)) == MEM
! && !memory_address_p (DFmode, XEXP (XEXP (operand1, 0), 0)))))
&& scratch_reg)
{
if (GET_CODE (operand1) == SUBREG)
--- 1401,1417 ----
operand1 = gen_rtx_MEM (GET_MODE (operand1), tem);
/* Handle secondary reloads for loads/stores of FP registers from
! REG+D addresses where D does not fit in 5 or 14 bits, including
(subreg (mem (addr))) cases. */
if (fp_reg_operand (operand0, mode)
&& ((GET_CODE (operand1) == MEM
! && !memory_address_p ((GET_MODE_SIZE (mode) == 4 ? SFmode : DFmode),
! XEXP (operand1, 0)))
|| ((GET_CODE (operand1) == SUBREG
&& GET_CODE (XEXP (operand1, 0)) == MEM
! && !memory_address_p ((GET_MODE_SIZE (mode) == 4
! ? SFmode : DFmode),
! XEXP (XEXP (operand1, 0), 0)))))
&& scratch_reg)
{
if (GET_CODE (operand1) == SUBREG)
*************** emit_move_sequence (operands, mode, scra
*** 1437,1446 ****
}
else if (fp_reg_operand (operand1, mode)
&& ((GET_CODE (operand0) == MEM
! && ! memory_address_p (DFmode, XEXP (operand0, 0)))
|| ((GET_CODE (operand0) == SUBREG)
&& GET_CODE (XEXP (operand0, 0)) == MEM
! && !memory_address_p (DFmode, XEXP (XEXP (operand0, 0), 0))))
&& scratch_reg)
{
if (GET_CODE (operand0) == SUBREG)
--- 1440,1453 ----
}
else if (fp_reg_operand (operand1, mode)
&& ((GET_CODE (operand0) == MEM
! && !memory_address_p ((GET_MODE_SIZE (mode) == 4
! ? SFmode : DFmode),
! XEXP (operand0, 0)))
|| ((GET_CODE (operand0) == SUBREG)
&& GET_CODE (XEXP (operand0, 0)) == MEM
! && !memory_address_p ((GET_MODE_SIZE (mode) == 4
! ? SFmode : DFmode),
! XEXP (XEXP (operand0, 0), 0))))
&& scratch_reg)
{
if (GET_CODE (operand0) == SUBREG)
*************** emit_move_sequence (operands, mode, scra
*** 1706,1711 ****
--- 1713,1719 ----
operands[1] = force_const_mem (mode, operand1);
operands[1] = legitimize_pic_address (XEXP (operands[1], 0),
mode, temp);
+ operands[1] = gen_rtx_MEM (mode, operands[1]);
emit_move_sequence (operands, mode, temp);
}
else
*************** output_indirect_call (insn, call_dest)
*** 6931,6937 ****
No need to check target flags as the length uniquely identifies
the remaining cases. */
if (attr_length_indirect_call (insn) == 8)
! return ".CALL\tARGW0=GR\n\t{bl|b,l} $$dyncall,%%r31\n\tcopy %%r31,%%r2";
/* Long millicode call, but we are not generating PIC or portable runtime
code. */
--- 6939,6953 ----
No need to check target flags as the length uniquely identifies
the remaining cases. */
if (attr_length_indirect_call (insn) == 8)
! {
! /* The HP linker substitutes a BLE for millicode calls using
! the short PIC PCREL form. Thus, we must use %r31 as the
! link register when generating PA 1.x code. */
! if (TARGET_PA_20)
! return ".CALL\tARGW0=GR\n\tb,l $$dyncall,%%r2\n\tcopy %%r2,%%r31";
! else
! return ".CALL\tARGW0=GR\n\tbl $$dyncall,%%r31\n\tcopy %%r31,%%r2";
! }
/* Long millicode call, but we are not generating PIC or portable runtime
code. */
diff -Nrc3pad gcc-3.3.4/gcc/config/pa/pa.h gcc-3.3.5/gcc/config/pa/pa.h
*** gcc-3.3.4/gcc/config/pa/pa.h 2004-02-28 23:44:40.000000000 +0000
--- gcc-3.3.5/gcc/config/pa/pa.h 2004-07-25 18:53:32.000000000 +0000
*************** extern int may_call_alloca;
*** 1264,1270 ****
`S' is the constant 31.
! `T' is for fp loads and stores. */
#define EXTRA_CONSTRAINT(OP, C) \
((C) == 'Q' ? \
(IS_RELOADING_PSEUDO_P (OP) \
--- 1264,1270 ----
`S' is the constant 31.
! `T' is for floating-point loads and stores. */
#define EXTRA_CONSTRAINT(OP, C) \
((C) == 'Q' ? \
(IS_RELOADING_PSEUDO_P (OP) \
*************** extern int may_call_alloca;
*** 1283,1304 ****
&& (move_operand (OP, GET_MODE (OP)) \
|| memory_address_p (GET_MODE (OP), XEXP (OP, 0))\
|| reload_in_progress)) \
! : ((C) == 'T' ? \
! (GET_CODE (OP) == MEM \
! /* Using DFmode forces only short displacements \
! to be recognized as valid in reg+d addresses. \
! However, this is not necessary for PA2.0 since\
! it has long FP loads/stores. \
! \
! FIXME: the ELF32 linker clobbers the LSB of \
! the FP register number in {fldw,fstw} insns. \
! Thus, we only allow long FP loads/stores on \
! TARGET_64BIT. */ \
! && memory_address_p ((TARGET_PA_20 \
! && !TARGET_ELF32 \
! ? GET_MODE (OP) \
! : DFmode), \
! XEXP (OP, 0)) \
&& !(GET_CODE (XEXP (OP, 0)) == LO_SUM \
&& GET_CODE (XEXP (XEXP (OP, 0), 0)) == REG \
&& REG_OK_FOR_BASE_P (XEXP (XEXP (OP, 0), 0))\
--- 1283,1306 ----
&& (move_operand (OP, GET_MODE (OP)) \
|| memory_address_p (GET_MODE (OP), XEXP (OP, 0))\
|| reload_in_progress)) \
! : ((C) == 'T' ? \
! (GET_CODE (OP) == MEM \
! /* Floating-point loads and stores are used to load \
! integer values as well as floating-point values. \
! They don't have the same set of REG+D address modes \
! as integer loads and stores. PA 1.x supports only \
! short displacements. PA 2.0 supports long displacements \
! but the base register needs to be aligned. \
! \
! The checks in GO_IF_LEGITIMATE_ADDRESS for SFmode and \
! DFmode test the validity of an address for use in a \
! floating point load or store. So, we use SFmode/DFmode \
! to see if the address is valid for a floating-point \
! load/store operation. */ \
! && memory_address_p ((GET_MODE_SIZE (GET_MODE (OP)) == 4 \
! ? SFmode \
! : DFmode), \
! XEXP (OP, 0)) \
&& !(GET_CODE (XEXP (OP, 0)) == LO_SUM \
&& GET_CODE (XEXP (XEXP (OP, 0), 0)) == REG \
&& REG_OK_FOR_BASE_P (XEXP (XEXP (OP, 0), 0))\
*************** extern int may_call_alloca;
*** 1398,1414 ****
&& REG_OK_FOR_BASE_P (XEXP (X, 1))) \
base = XEXP (X, 1), index = XEXP (X, 0); \
if (base != 0) \
! if (GET_CODE (index) == CONST_INT \
! && ((INT_14_BITS (index) \
! && (TARGET_SOFT_FLOAT \
! || (TARGET_PA_20 \
! && ((MODE == SFmode \
! && (INTVAL (index) % 4) == 0)\
! || (MODE == DFmode \
! && (INTVAL (index) % 8) == 0)))\
! || ((MODE) != SFmode && (MODE) != DFmode))) \
! || INT_5_BITS (index))) \
! goto ADDR; \
if (! TARGET_SOFT_FLOAT \
&& ! TARGET_DISABLE_INDEXING \
&& base \
--- 1400,1435 ----
&& REG_OK_FOR_BASE_P (XEXP (X, 1))) \
base = XEXP (X, 1), index = XEXP (X, 0); \
if (base != 0) \
! if (GET_CODE (index) == CONST_INT \
! && ((INT_14_BITS (index) \
! && (((MODE) != DImode \
! && (MODE) != SFmode \
! && (MODE) != DFmode) \
! /* The base register for DImode loads and stores \
! with long displacements must be aligned because \
! the lower three bits in the displacement are \
! assumed to be zero. */ \
! || ((MODE) == DImode \
! && (!TARGET_64BIT \
! || (INTVAL (index) % 8) == 0)) \
! /* Similarly, the base register for SFmode/DFmode \
! loads and stores with long displacements must \
! be aligned. \
! \
! FIXME: the ELF32 linker clobbers the LSB of \
! the FP register number in PA 2.0 floating-point \
! insns with long displacements. This is because \
! R_PARISC_DPREL14WR and other relocations like \
! it are not supported. For now, we reject long \
! displacements on this target. */ \
! || (((MODE) == SFmode || (MODE) == DFmode) \
! && (TARGET_SOFT_FLOAT \
! || (TARGET_PA_20 \
! && !TARGET_ELF32 \
! && (INTVAL (index) \
! % GET_MODE_SIZE (MODE)) == 0))))) \
! || INT_5_BITS (index))) \
! goto ADDR; \
if (! TARGET_SOFT_FLOAT \
&& ! TARGET_DISABLE_INDEXING \
&& base \
*************** do { \
*** 1511,1516 ****
--- 1532,1542 ----
else \
newoffset = offset & ~mask; \
\
+ /* Ensure that long displacements are aligned. */ \
+ if (!VAL_5_BITS_P (newoffset) \
+ && GET_MODE_CLASS (MODE) == MODE_FLOAT) \
+ newoffset &= ~(GET_MODE_SIZE (MODE) -1); \
+ \
if (newoffset != 0 \
&& VAL_14_BITS_P (newoffset)) \
{ \
diff -Nrc3pad gcc-3.3.4/gcc/config/pa/pa.md gcc-3.3.5/gcc/config/pa/pa.md
*** gcc-3.3.4/gcc/config/pa/pa.md 2004-02-28 23:44:41.000000000 +0000
--- gcc-3.3.5/gcc/config/pa/pa.md 2004-07-25 21:19:28.000000000 +0000
***************
*** 2264,2272 ****
(define_insn ""
[(set (match_operand:SI 0 "reg_or_nonsymb_mem_operand"
! "=r,r,r,r,r,r,Q,!*q,!f,f,*TR")
(match_operand:SI 1 "move_operand"
! "A,r,J,N,K,RQ,rM,!rM,!fM,*RT,f"))]
"(register_operand (operands[0], SImode)
|| reg_or_0_operand (operands[1], SImode))
&& ! TARGET_SOFT_FLOAT"
--- 2264,2272 ----
(define_insn ""
[(set (match_operand:SI 0 "reg_or_nonsymb_mem_operand"
! "=r,r,r,r,r,r,Q,!*q,!r,!f,f,*TR")
(match_operand:SI 1 "move_operand"
! "A,r,J,N,K,RQ,rM,!rM,!*q,!fM,*RT,f"))]
"(register_operand (operands[0], SImode)
|| reg_or_0_operand (operands[1], SImode))
&& ! TARGET_SOFT_FLOAT"
***************
*** 2279,2296 ****
ldw%M1 %1,%0
stw%M0 %r1,%0
mtsar %r1
fcpy,sgl %f1,%0
fldw%F1 %1,%0
fstw%F0 %1,%0"
! [(set_attr "type" "load,move,move,move,shift,load,store,move,fpalu,fpload,fpstore")
(set_attr "pa_combine_type" "addmove")
! (set_attr "length" "4,4,4,4,4,4,4,4,4,4,4")])
(define_insn ""
[(set (match_operand:SI 0 "reg_or_nonsymb_mem_operand"
! "=r,r,r,r,r,r,Q,!*q")
(match_operand:SI 1 "move_operand"
! "A,r,J,N,K,RQ,rM,!rM"))]
"(register_operand (operands[0], SImode)
|| reg_or_0_operand (operands[1], SImode))
&& TARGET_SOFT_FLOAT"
--- 2279,2297 ----
ldw%M1 %1,%0
stw%M0 %r1,%0
mtsar %r1
+ {mfctl|mfctl,w} %%sar,%0
fcpy,sgl %f1,%0
fldw%F1 %1,%0
fstw%F0 %1,%0"
! [(set_attr "type" "load,move,move,move,shift,load,store,move,move,fpalu,fpload,fpstore")
(set_attr "pa_combine_type" "addmove")
! (set_attr "length" "4,4,4,4,4,4,4,4,4,4,4,4")])
(define_insn ""
[(set (match_operand:SI 0 "reg_or_nonsymb_mem_operand"
! "=r,r,r,r,r,r,Q,!*q,!r")
(match_operand:SI 1 "move_operand"
! "A,r,J,N,K,RQ,rM,!rM,!*q"))]
"(register_operand (operands[0], SImode)
|| reg_or_0_operand (operands[1], SImode))
&& TARGET_SOFT_FLOAT"
***************
*** 2302,2311 ****
{zdepi|depwi,z} %Z1,%0
ldw%M1 %1,%0
stw%M0 %r1,%0
! mtsar %r1"
! [(set_attr "type" "load,move,move,move,move,load,store,move")
(set_attr "pa_combine_type" "addmove")
! (set_attr "length" "4,4,4,4,4,4,4,4")])
(define_insn ""
[(set (match_operand:SI 0 "register_operand" "=r")
--- 2303,2313 ----
{zdepi|depwi,z} %Z1,%0
ldw%M1 %1,%0
stw%M0 %r1,%0
! mtsar %r1
! {mfctl|mfctl,w} %%sar,%0"
! [(set_attr "type" "load,move,move,move,move,load,store,move,move")
(set_attr "pa_combine_type" "addmove")
! (set_attr "length" "4,4,4,4,4,4,4,4,4")])
(define_insn ""
[(set (match_operand:SI 0 "register_operand" "=r")
***************
*** 2699,2706 ****
}")
(define_insn ""
! [(set (match_operand:HI 0 "reg_or_nonsymb_mem_operand" "=r,r,r,r,r,Q,!*q,!*f")
! (match_operand:HI 1 "move_operand" "r,J,N,K,RQ,rM,!rM,!*fM"))]
"register_operand (operands[0], HImode)
|| reg_or_0_operand (operands[1], HImode)"
"@
--- 2701,2710 ----
}")
(define_insn ""
! [(set (match_operand:HI 0 "reg_or_nonsymb_mem_operand"
! "=r,r,r,r,r,Q,!*q,!r,!*f")
! (match_operand:HI 1 "move_operand"
! "r,J,N,K,RQ,rM,!rM,!*q,!*fM"))]
"register_operand (operands[0], HImode)
|| reg_or_0_operand (operands[1], HImode)"
"@
***************
*** 2711,2720 ****
ldh%M1 %1,%0
sth%M0 %r1,%0
mtsar %r1
fcpy,sgl %f1,%0"
! [(set_attr "type" "move,move,move,shift,load,store,move,fpalu")
(set_attr "pa_combine_type" "addmove")
! (set_attr "length" "4,4,4,4,4,4,4,4")])
(define_insn ""
[(set (match_operand:HI 0 "register_operand" "=r")
--- 2715,2725 ----
ldh%M1 %1,%0
sth%M0 %r1,%0
mtsar %r1
+ {mfctl|mfctl,w} %sar,%0
fcpy,sgl %f1,%0"
! [(set_attr "type" "move,move,move,shift,load,store,move,move,fpalu")
(set_attr "pa_combine_type" "addmove")
! (set_attr "length" "4,4,4,4,4,4,4,4,4")])
(define_insn ""
[(set (match_operand:HI 0 "register_operand" "=r")
***************
*** 2814,2821 ****
}")
(define_insn ""
! [(set (match_operand:QI 0 "reg_or_nonsymb_mem_operand" "=r,r,r,r,r,Q,!*q,!*f")
! (match_operand:QI 1 "move_operand" "r,J,N,K,RQ,rM,!rM,!*fM"))]
"register_operand (operands[0], QImode)
|| reg_or_0_operand (operands[1], QImode)"
"@
--- 2819,2828 ----
}")
(define_insn ""
! [(set (match_operand:QI 0 "reg_or_nonsymb_mem_operand"
! "=r,r,r,r,r,Q,!*q,!r,!*f")
! (match_operand:QI 1 "move_operand"
! "r,J,N,K,RQ,rM,!rM,!*q,!*fM"))]
"register_operand (operands[0], QImode)
|| reg_or_0_operand (operands[1], QImode)"
"@
***************
*** 2826,2835 ****
ldb%M1 %1,%0
stb%M0 %r1,%0
mtsar %r1
fcpy,sgl %f1,%0"
! [(set_attr "type" "move,move,move,shift,load,store,move,fpalu")
(set_attr "pa_combine_type" "addmove")
! (set_attr "length" "4,4,4,4,4,4,4,4")])
(define_insn ""
[(set (match_operand:QI 0 "register_operand" "=r")
--- 2833,2843 ----
ldb%M1 %1,%0
stb%M0 %r1,%0
mtsar %r1
+ {mfctl|mfctl,w} %%sar,%0
fcpy,sgl %f1,%0"
! [(set_attr "type" "move,move,move,shift,load,store,move,move,fpalu")
(set_attr "pa_combine_type" "addmove")
! (set_attr "length" "4,4,4,4,4,4,4,4,4")])
(define_insn ""
[(set (match_operand:QI 0 "register_operand" "=r")
***************
*** 3137,3145 ****
(define_insn ""
[(set (match_operand:DF 0 "reg_or_nonsymb_mem_operand"
! "=r,r,r,r,r,Q,!*q,!f,f,*TR")
(match_operand:DF 1 "move_operand"
! "r,J,N,K,RQ,rM,!rM,!fM,*RT,f"))]
"(register_operand (operands[0], DFmode)
|| reg_or_0_operand (operands[1], DFmode))
&& ! TARGET_SOFT_FLOAT && TARGET_64BIT"
--- 3145,3153 ----
(define_insn ""
[(set (match_operand:DF 0 "reg_or_nonsymb_mem_operand"
! "=r,r,r,r,r,Q,!f,f,*TR")
(match_operand:DF 1 "move_operand"
! "r,J,N,K,RQ,rM,!fM,*RT,f"))]
"(register_operand (operands[0], DFmode)
|| reg_or_0_operand (operands[1], DFmode))
&& ! TARGET_SOFT_FLOAT && TARGET_64BIT"
***************
*** 3150,3162 ****
depdi,z %z1,%0
ldd%M1 %1,%0
std%M0 %r1,%0
- mtsar %r1
fcpy,dbl %f1,%0
fldd%F1 %1,%0
fstd%F0 %1,%0"
! [(set_attr "type" "move,move,move,shift,load,store,move,fpalu,fpload,fpstore")
(set_attr "pa_combine_type" "addmove")
! (set_attr "length" "4,4,4,4,4,4,4,4,4,4")])
(define_insn ""
[(set (match_operand:DF 0 "register_operand" "=fx")
--- 3158,3169 ----
depdi,z %z1,%0
ldd%M1 %1,%0
std%M0 %r1,%0
fcpy,dbl %f1,%0
fldd%F1 %1,%0
fstd%F0 %1,%0"
! [(set_attr "type" "move,move,move,shift,load,store,fpalu,fpload,fpstore")
(set_attr "pa_combine_type" "addmove")
! (set_attr "length" "4,4,4,4,4,4,4,4,4")])
(define_insn ""
[(set (match_operand:DF 0 "register_operand" "=fx")
***************
*** 3296,3304 ****
(define_insn ""
[(set (match_operand:DI 0 "reg_or_nonsymb_mem_operand"
! "=r,r,r,r,r,r,Q,!*q,!f,f,*TR")
(match_operand:DI 1 "move_operand"
! "A,r,J,N,K,RQ,rM,!rM,!fM,*RT,f"))]
"(register_operand (operands[0], DImode)
|| reg_or_0_operand (operands[1], DImode))
&& ! TARGET_SOFT_FLOAT && TARGET_64BIT"
--- 3303,3311 ----
(define_insn ""
[(set (match_operand:DI 0 "reg_or_nonsymb_mem_operand"
! "=r,r,r,r,r,r,Q,!*q,!r,!f,f,*TR")
(match_operand:DI 1 "move_operand"
! "A,r,J,N,K,RQ,rM,!rM,!*q,!fM,*RT,f"))]
"(register_operand (operands[0], DImode)
|| reg_or_0_operand (operands[1], DImode))
&& ! TARGET_SOFT_FLOAT && TARGET_64BIT"
***************
*** 3311,3322 ****
ldd%M1 %1,%0
std%M0 %r1,%0
mtsar %r1
fcpy,dbl %f1,%0
fldd%F1 %1,%0
fstd%F0 %1,%0"
! [(set_attr "type" "load,move,move,move,shift,load,store,move,fpalu,fpload,fpstore")
(set_attr "pa_combine_type" "addmove")
! (set_attr "length" "4,4,4,4,4,4,4,4,4,4,4")])
(define_insn ""
[(set (match_operand:DI 0 "reg_or_nonsymb_mem_operand"
--- 3318,3330 ----
ldd%M1 %1,%0
std%M0 %r1,%0
mtsar %r1
+ {mfctl|mfctl,w} %%sar,%0
fcpy,dbl %f1,%0
fldd%F1 %1,%0
fstd%F0 %1,%0"
! [(set_attr "type" "load,move,move,move,shift,load,store,move,move,fpalu,fpload,fpstore")
(set_attr "pa_combine_type" "addmove")
! (set_attr "length" "4,4,4,4,4,4,4,4,4,4,4,4")])
(define_insn ""
[(set (match_operand:DI 0 "reg_or_nonsymb_mem_operand"
diff -Nrc3pad gcc-3.3.4/gcc/config/s390/s390.c gcc-3.3.5/gcc/config/s390/s390.c
*** gcc-3.3.4/gcc/config/s390/s390.c 2004-03-13 11:26:34.000000000 +0000
--- gcc-3.3.5/gcc/config/s390/s390.c 2004-08-03 20:06:50.000000000 +0000
*************** s390_expand_clrstr (dst, len)
*** 2830,2845 ****
and return the result in TARGET. */
void
! s390_expand_cmpstr (target, op0, op1, len)
rtx target;
rtx op0;
rtx op1;
rtx len;
{
rtx (*gen_short) PARAMS ((rtx, rtx, rtx)) =
! TARGET_64BIT ? gen_cmpstr_short_64 : gen_cmpstr_short_31;
rtx (*gen_long) PARAMS ((rtx, rtx, rtx, rtx)) =
! TARGET_64BIT ? gen_cmpstr_long_64 : gen_cmpstr_long_31;
rtx (*gen_result) PARAMS ((rtx)) =
GET_MODE (target) == DImode ? gen_cmpint_di : gen_cmpint_si;
--- 2830,2845 ----
and return the result in TARGET. */
void
! s390_expand_cmpmem (target, op0, op1, len)
rtx target;
rtx op0;
rtx op1;
rtx len;
{
rtx (*gen_short) PARAMS ((rtx, rtx, rtx)) =
! TARGET_64BIT ? gen_cmpmem_short_64 : gen_cmpmem_short_31;
rtx (*gen_long) PARAMS ((rtx, rtx, rtx, rtx)) =
! TARGET_64BIT ? gen_cmpmem_long_64 : gen_cmpmem_long_31;
rtx (*gen_result) PARAMS ((rtx)) =
GET_MODE (target) == DImode ? gen_cmpint_di : gen_cmpint_si;
diff -Nrc3pad gcc-3.3.4/gcc/config/s390/s390.md gcc-3.3.5/gcc/config/s390/s390.md
*** gcc-3.3.4/gcc/config/s390/s390.md 2004-03-07 02:48:02.000000000 +0000
--- gcc-3.3.5/gcc/config/s390/s390.md 2004-08-03 20:06:51.000000000 +0000
***************
*** 1863,1895 ****
(set_attr "length" "8")])
;
! ; cmpstrM instruction pattern(s).
;
! (define_expand "cmpstrdi"
[(set (match_operand:DI 0 "register_operand" "")
(compare:DI (match_operand:BLK 1 "memory_operand" "")
(match_operand:BLK 2 "memory_operand" "") ) )
(use (match_operand:DI 3 "general_operand" ""))
(use (match_operand:DI 4 "" ""))]
"TARGET_64BIT"
! "s390_expand_cmpstr (operands[0], operands[1],
operands[2], operands[3]); DONE;")
! (define_expand "cmpstrsi"
[(set (match_operand:SI 0 "register_operand" "")
(compare:SI (match_operand:BLK 1 "memory_operand" "")
(match_operand:BLK 2 "memory_operand" "") ) )
(use (match_operand:SI 3 "general_operand" ""))
(use (match_operand:SI 4 "" ""))]
""
! "s390_expand_cmpstr (operands[0], operands[1],
operands[2], operands[3]); DONE;")
; Compare a block that is up to 256 bytes in length.
; The block length is taken as (operands[2] % 256) + 1.
! (define_insn "cmpstr_short_64"
[(set (reg:CCS 33)
(compare:CCS (match_operand:BLK 0 "memory_operand" "=Q,Q")
(match_operand:BLK 1 "memory_operand" "Q,Q")))
--- 1863,1895 ----
(set_attr "length" "8")])
;
! ; cmpmemM instruction pattern(s).
;
! (define_expand "cmpmemdi"
[(set (match_operand:DI 0 "register_operand" "")
(compare:DI (match_operand:BLK 1 "memory_operand" "")
(match_operand:BLK 2 "memory_operand" "") ) )
(use (match_operand:DI 3 "general_operand" ""))
(use (match_operand:DI 4 "" ""))]
"TARGET_64BIT"
! "s390_expand_cmpmem (operands[0], operands[1],
operands[2], operands[3]); DONE;")
! (define_expand "cmpmemsi"
[(set (match_operand:SI 0 "register_operand" "")
(compare:SI (match_operand:BLK 1 "memory_operand" "")
(match_operand:BLK 2 "memory_operand" "") ) )
(use (match_operand:SI 3 "general_operand" ""))
(use (match_operand:SI 4 "" ""))]
""
! "s390_expand_cmpmem (operands[0], operands[1],
operands[2], operands[3]); DONE;")
; Compare a block that is up to 256 bytes in length.
; The block length is taken as (operands[2] % 256) + 1.
! (define_insn "cmpmem_short_64"
[(set (reg:CCS 33)
(compare:CCS (match_operand:BLK 0 "memory_operand" "=Q,Q")
(match_operand:BLK 1 "memory_operand" "Q,Q")))
***************
*** 1917,1923 ****
(set_attr "atype" "mem,mem")
(set_attr "length" "*,14")])
! (define_insn "cmpstr_short_31"
[(set (reg:CCS 33)
(compare:CCS (match_operand:BLK 0 "memory_operand" "=Q,Q")
(match_operand:BLK 1 "memory_operand" "Q,Q")))
--- 1917,1923 ----
(set_attr "atype" "mem,mem")
(set_attr "length" "*,14")])
! (define_insn "cmpmem_short_31"
[(set (reg:CCS 33)
(compare:CCS (match_operand:BLK 0 "memory_operand" "=Q,Q")
(match_operand:BLK 1 "memory_operand" "Q,Q")))
***************
*** 1947,1953 ****
; Compare a block of arbitrary length.
! (define_insn "cmpstr_long_64"
[(clobber (match_operand:TI 0 "register_operand" "=d"))
(clobber (match_operand:TI 1 "register_operand" "=d"))
(set (reg:CCS 33)
--- 1947,1953 ----
; Compare a block of arbitrary length.
! (define_insn "cmpmem_long_64"
[(clobber (match_operand:TI 0 "register_operand" "=d"))
(clobber (match_operand:TI 1 "register_operand" "=d"))
(set (reg:CCS 33)
***************
*** 1962,1968 ****
(set_attr "type" "vs")
(set_attr "length" "8")])
! (define_insn "cmpstr_long_31"
[(clobber (match_operand:DI 0 "register_operand" "=d"))
(clobber (match_operand:DI 1 "register_operand" "=d"))
(set (reg:CCS 33)
--- 1962,1968 ----
(set_attr "type" "vs")
(set_attr "length" "8")])
! (define_insn "cmpmem_long_31"
[(clobber (match_operand:DI 0 "register_operand" "=d"))
(clobber (match_operand:DI 1 "register_operand" "=d"))
(set (reg:CCS 33)
diff -Nrc3pad gcc-3.3.4/gcc/config/s390/s390-protos.h gcc-3.3.5/gcc/config/s390/s390-protos.h
*** gcc-3.3.4/gcc/config/s390/s390-protos.h 2003-11-06 21:53:06.000000000 +0000
--- gcc-3.3.5/gcc/config/s390/s390-protos.h 2004-08-03 20:06:47.000000000 +0000
*************** extern void emit_symbolic_move PARAMS ((
*** 69,75 ****
extern void s390_load_address PARAMS ((rtx, rtx));
extern void s390_expand_movstr PARAMS ((rtx, rtx, rtx));
extern void s390_expand_clrstr PARAMS ((rtx, rtx));
! extern void s390_expand_cmpstr PARAMS ((rtx, rtx, rtx, rtx));
extern rtx s390_return_addr_rtx PARAMS ((int, rtx));
extern void s390_output_symbolic_const PARAMS ((FILE *, rtx));
--- 69,75 ----
extern void s390_load_address PARAMS ((rtx, rtx));
extern void s390_expand_movstr PARAMS ((rtx, rtx, rtx));
extern void s390_expand_clrstr PARAMS ((rtx, rtx));
! extern void s390_expand_cmpmem PARAMS ((rtx, rtx, rtx, rtx));
extern rtx s390_return_addr_rtx PARAMS ((int, rtx));
extern void s390_output_symbolic_const PARAMS ((FILE *, rtx));
diff -Nrc3pad gcc-3.3.4/gcc/config/sh/libgcc-std.ver gcc-3.3.5/gcc/config/sh/libgcc-std.ver
*** gcc-3.3.4/gcc/config/sh/libgcc-std.ver 1970-01-01 00:00:00.000000000 +0000
--- gcc-3.3.5/gcc/config/sh/libgcc-std.ver 2004-07-26 00:47:34.000000000 +0000
***************
*** 0 ****
--- 1,196 ----
+ GCC_3.0 {
+ # libgcc1 integer symbols
+ __absvsi2
+ __addvsi3
+ # __ashlsi3
+ # __ashrsi3
+ __divsi3
+ # __lshrsi3
+ __modsi3
+ __mulsi3
+ __mulvsi3
+ __negvsi2
+ __subvsi3
+ # __udivsi3
+ __umodsi3
+
+ # libgcc1 floating point symbols
+ __addsf3
+ __adddf3
+ __addxf3
+ __addtf3
+ __divsf3
+ __divdf3
+ __divxf3
+ __divtf3
+ __eqsf2
+ __eqdf2
+ __eqxf2
+ __eqtf2
+ __extenddfxf2
+ __extenddftf2
+ __extendsfdf2
+ __extendsfxf2
+ __extendsftf2
+ __fixsfsi
+ __fixdfsi
+ __fixxfsi
+ __fixtfsi
+ __floatsisf
+ __floatsidf
+ __floatsixf
+ __floatsitf
+ __gesf2
+ __gedf2
+ __gexf2
+ __getf2
+ __gtsf2
+ __gtdf2
+ __gtxf2
+ __gttf2
+ __lesf2
+ __ledf2
+ __lexf2
+ __letf2
+ __ltsf2
+ __ltdf2
+ __ltxf2
+ __lttf2
+ __mulsf3
+ __muldf3
+ __mulxf3
+ __multf3
+ __negsf2
+ __negdf2
+ __negxf2
+ __negtf2
+ __nesf2
+ __nedf2
+ __nexf2
+ __netf2
+ __subsf3
+ __subdf3
+ __subxf3
+ __subtf3
+ __truncdfsf2
+ __truncxfsf2
+ __trunctfsf2
+ __truncxfdf2
+ __trunctfdf2
+
+ # libgcc2 DImode arithmetic (for 32-bit targets).
+ __absvdi2
+ __addvdi3
+ __ashldi3
+ __ashrdi3
+ __cmpdi2
+ __divdi3
+ __ffsdi2
+ __fixdfdi
+ __fixsfdi
+ __fixtfdi
+ __fixxfdi
+ __fixunsdfdi
+ __fixunsdfsi
+ __fixunssfsi
+ __fixunssfdi
+ __fixunstfdi
+ __fixunstfsi
+ __fixunsxfdi
+ __fixunsxfsi
+ __floatdidf
+ __floatdisf
+ __floatdixf
+ __floatditf
+ __lshrdi3
+ __moddi3
+ __muldi3
+ __mulvdi3
+ __negdi2
+ __negvdi2
+ __subvdi3
+ __ucmpdi2
+ __udivdi3
+ __udivmoddi4
+ __umoddi3
+
+ # libgcc2 TImode arithmetic (for 64-bit targets).
+ __ashlti3
+ __ashrti3
+ __cmpti2
+ __divti3
+ __ffsti2
+ __fixdfti
+ __fixsfti
+ __fixtfti
+ __fixxfti
+ __lshrti3
+ __modti3
+ __multi3
+ __negti2
+ __ucmpti2
+ __udivmodti4
+ __udivti3
+ __umodti3
+ __fixunsdfti
+ __fixunssfti
+ __fixunstfti
+ __fixunsxfti
+ __floattidf
+ __floattisf
+ __floattixf
+ __floattitf
+
+ # Used to deal with trampoline initialization on some platforms
+ __clear_cache
+
+ # EH symbols
+ _Unwind_DeleteException
+ _Unwind_Find_FDE
+ _Unwind_ForcedUnwind
+ _Unwind_GetGR
+ _Unwind_GetIP
+ _Unwind_GetLanguageSpecificData
+ _Unwind_GetRegionStart
+ _Unwind_GetTextRelBase
+ _Unwind_GetDataRelBase
+ _Unwind_RaiseException
+ _Unwind_Resume
+ _Unwind_SetGR
+ _Unwind_SetIP
+ __deregister_frame
+ __deregister_frame_info
+ __deregister_frame_info_bases
+ __register_frame
+ __register_frame_info
+ __register_frame_info_bases
+ __register_frame_info_table
+ __register_frame_info_table_bases
+ __register_frame_table
+
+ # SjLj EH symbols
+ _Unwind_SjLj_Register
+ _Unwind_SjLj_Unregister
+ _Unwind_SjLj_RaiseException
+ _Unwind_SjLj_ForcedUnwind
+ _Unwind_SjLj_Resume
+ }
+
+ %inherit GCC_3.3 GCC_3.0
+ GCC_3.3 {
+ _Unwind_FindEnclosingFunction
+ _Unwind_GetCFA
+ _Unwind_Backtrace
+ _Unwind_Resume_or_Rethrow
+ _Unwind_SjLj_Resume_or_Rethrow
+ }
+
+ %inherit GCC_3.3.1 GCC_3.3
+ GCC_3.3.1 {
+ __gcc_personality_sj0
+ __gcc_personality_v0
+ }
+
+ %inherit GCC_3.3.2 GCC_3.3.1
+ GCC_3.3.2 {
+ }
diff -Nrc3pad gcc-3.3.4/gcc/config/sh/sh.md gcc-3.3.5/gcc/config/sh/sh.md
*** gcc-3.3.4/gcc/config/sh/sh.md 2004-05-13 14:28:34.000000000 +0000
--- gcc-3.3.5/gcc/config/sh/sh.md 2004-07-26 00:47:34.000000000 +0000
***************
*** 2174,2180 ****
parts[0] = gen_reg_rtx (SImode);
parts[1] = gen_reg_rtx (SImode);
emit_insn (gen_rotlsi3_16 (parts[2-choice], operands[1]));
! parts[choice-1] = operands[1];
emit_insn (gen_ashlsi3 (parts[0], parts[0], GEN_INT (8)));
emit_insn (gen_lshrsi3 (parts[1], parts[1], GEN_INT (8)));
emit_insn (gen_iorsi3 (operands[0], parts[0], parts[1]));
--- 2174,2180 ----
parts[0] = gen_reg_rtx (SImode);
parts[1] = gen_reg_rtx (SImode);
emit_insn (gen_rotlsi3_16 (parts[2-choice], operands[1]));
! emit_move_insn (parts[choice-1], operands[1]);
emit_insn (gen_ashlsi3 (parts[0], parts[0], GEN_INT (8)));
emit_insn (gen_lshrsi3 (parts[1], parts[1], GEN_INT (8)));
emit_insn (gen_iorsi3 (operands[0], parts[0], parts[1]));
diff -Nrc3pad gcc-3.3.4/gcc/config/sh/t-linux gcc-3.3.5/gcc/config/sh/t-linux
*** gcc-3.3.4/gcc/config/sh/t-linux 2003-12-02 05:33:16.000000000 +0000
--- gcc-3.3.5/gcc/config/sh/t-linux 2004-07-26 00:47:35.000000000 +0000
*************** MULTILIB_EXCEPTIONS=
*** 14,21 ****
EXTRA_MULTILIB_PARTS= crtbegin.o crtend.o crtbeginS.o crtendS.o
# Override t-slibgcc-elf-ver to export some libgcc symbols with
! # the symbol versions that glibc used.
! SHLIB_MAPFILES = $(srcdir)/libgcc-std.ver $(srcdir)/config/sh/libgcc-glibc.ver
# Override SHLIB_LINK and SHLIB_INSTALL to use linker script
# libgcc_s.so.
--- 14,24 ----
EXTRA_MULTILIB_PARTS= crtbegin.o crtend.o crtbeginS.o crtendS.o
# Override t-slibgcc-elf-ver to export some libgcc symbols with
! # the symbol versions that glibc used. Also use sh specific
! # libgcc-std.ver to avoid to export some lib1func routines which
! # shoud not be called via PLT.
! SHLIB_MAPFILES = $(srcdir)/config/sh/libgcc-std.ver \
! $(srcdir)/config/sh/libgcc-glibc.ver
# Override SHLIB_LINK and SHLIB_INSTALL to use linker script
# libgcc_s.so.
diff -Nrc3pad gcc-3.3.4/gcc/config/sparc/sol2-bi.h gcc-3.3.5/gcc/config/sparc/sol2-bi.h
*** gcc-3.3.4/gcc/config/sparc/sol2-bi.h 2003-12-18 20:12:49.000000000 +0000
--- gcc-3.3.5/gcc/config/sparc/sol2-bi.h 2004-07-13 11:21:19.000000000 +0000
***************
*** 18,23 ****
--- 18,24 ----
#undef ASM_CPU32_DEFAULT_SPEC
#define ASM_CPU32_DEFAULT_SPEC "-xarch=v8plus"
#endif
+
#if TARGET_CPU_DEFAULT == TARGET_CPU_ultrasparc
#undef CPP_CPU64_DEFAULT_SPEC
#define CPP_CPU64_DEFAULT_SPEC ""
***************
*** 27,32 ****
--- 28,42 ----
#define ASM_CPU64_DEFAULT_SPEC AS_SPARC64_FLAG "a"
#endif
+ #if TARGET_CPU_DEFAULT == TARGET_CPU_ultrasparc3
+ #undef CPP_CPU64_DEFAULT_SPEC
+ #define CPP_CPU64_DEFAULT_SPEC ""
+ #undef ASM_CPU32_DEFAULT_SPEC
+ #define ASM_CPU32_DEFAULT_SPEC "-xarch=v8plusb"
+ #undef ASM_CPU64_DEFAULT_SPEC
+ #define ASM_CPU64_DEFAULT_SPEC AS_SPARC64_FLAG "b"
+ #endif
+
#if DEFAULT_ARCH32_P
#define DEF_ARCH32_SPEC(__str) "%{!m64:" __str "}"
#define DEF_ARCH64_SPEC(__str) "%{m64:" __str "}"
***************
*** 45,59 ****
%{mcpu=sparclite|mcpu-f930|mcpu=f934:-D__sparclite__} \
%{mcpu=v8:" DEF_ARCH32_SPEC("-D__sparcv8") "} \
%{mcpu=supersparc:-D__supersparc__ " DEF_ARCH32_SPEC("-D__sparcv8") "} \
! %{mcpu=v9|mcpu=ultrasparc:" DEF_ARCH32_SPEC("-D__sparcv8") "} \
%{!mcpu*:%{!mcypress:%{!msparclite:%{!mf930:%{!mf934:%{!mv8:%{!msupersparc:%(cpp_cpu_default)}}}}}}} \
"
#undef ASM_CPU_SPEC
#define ASM_CPU_SPEC "\
- %{mcpu=ultrasparc:" DEF_ARCH32_SPEC("-xarch=v8plusa") DEF_ARCH64_SPEC(AS_SPARC64_FLAG "a") "} \
%{mcpu=v9:" DEF_ARCH32_SPEC("-xarch=v8plus") DEF_ARCH64_SPEC(AS_SPARC64_FLAG) "} \
! %{!mcpu=ultrasparc:%{!mcpu=v9:%{mcpu*:" DEF_ARCH32_SPEC("-xarch=v8") DEF_ARCH64_SPEC(AS_SPARC64_FLAG) "}}} \
%{!mcpu*:%(asm_cpu_default)} \
"
--- 55,70 ----
%{mcpu=sparclite|mcpu-f930|mcpu=f934:-D__sparclite__} \
%{mcpu=v8:" DEF_ARCH32_SPEC("-D__sparcv8") "} \
%{mcpu=supersparc:-D__supersparc__ " DEF_ARCH32_SPEC("-D__sparcv8") "} \
! %{mcpu=v9|mcpu=ultrasparc|mcpu=ultrasparc3:" DEF_ARCH32_SPEC("-D__sparcv8") "} \
%{!mcpu*:%{!mcypress:%{!msparclite:%{!mf930:%{!mf934:%{!mv8:%{!msupersparc:%(cpp_cpu_default)}}}}}}} \
"
#undef ASM_CPU_SPEC
#define ASM_CPU_SPEC "\
%{mcpu=v9:" DEF_ARCH32_SPEC("-xarch=v8plus") DEF_ARCH64_SPEC(AS_SPARC64_FLAG) "} \
! %{mcpu=ultrasparc:" DEF_ARCH32_SPEC("-xarch=v8plusa") DEF_ARCH64_SPEC(AS_SPARC64_FLAG "a") "} \
! %{mcpu=ultrasparc3:" DEF_ARCH32_SPEC("-xarch=v8plusb") DEF_ARCH64_SPEC(AS_SPARC64_FLAG "b") "} \
! %{!mcpu=ultrasparc3:%{!mcpu=ultrasparc:%{!mcpu=v9:%{mcpu*:" DEF_ARCH32_SPEC("-xarch=v8") DEF_ARCH64_SPEC(AS_SPARC64_FLAG) "}}}} \
%{!mcpu*:%(asm_cpu_default)} \
"
***************
*** 143,149 ****
%{compat-bsd: \
%{!YP,*:%{p|pg:-Y P,/usr/ucblib/sparcv9:/usr/lib/libp/sparcv9:/usr/lib/sparcv9} \
%{!p:%{!pg:-Y P,/usr/ucblib/sparcv9:/usr/lib/sparcv9}}} \
! -R /usr/ucblib} \
%{!compat-bsd: \
%{!YP,*:%{p|pg:-Y P,/usr/lib/libp/sparcv9:/usr/lib/sparcv9} \
%{!p:%{!pg:-Y P,/usr/lib/sparcv9}}}}"
--- 154,160 ----
%{compat-bsd: \
%{!YP,*:%{p|pg:-Y P,/usr/ucblib/sparcv9:/usr/lib/libp/sparcv9:/usr/lib/sparcv9} \
%{!p:%{!pg:-Y P,/usr/ucblib/sparcv9:/usr/lib/sparcv9}}} \
! -R /usr/ucblib/sparcv9} \
%{!compat-bsd: \
%{!YP,*:%{p|pg:-Y P,/usr/lib/libp/sparcv9:/usr/lib/sparcv9} \
%{!p:%{!pg:-Y P,/usr/lib/sparcv9}}}}"
diff -Nrc3pad gcc-3.3.4/gcc/config/sparc/sol2.h gcc-3.3.5/gcc/config/sparc/sol2.h
*** gcc-3.3.4/gcc/config/sparc/sol2.h 2002-09-15 12:03:42.000000000 +0000
--- gcc-3.3.5/gcc/config/sparc/sol2.h 2004-07-12 13:16:44.000000000 +0000
*************** Boston, MA 02111-1307, USA. */
*** 39,49 ****
--- 39,55 ----
#define ASM_CPU_DEFAULT_SPEC "-xarch=v8plusa"
#endif
+ #if TARGET_CPU_DEFAULT == TARGET_CPU_ultrasparc3
+ #undef ASM_CPU_DEFAULT_SPEC
+ #define ASM_CPU_DEFAULT_SPEC "-xarch=v8plusb"
+ #endif
+
#undef ASM_CPU_SPEC
#define ASM_CPU_SPEC "\
%{mcpu=v8plus:-xarch=v8plus} \
%{mcpu=v9:-xarch=v8plus} \
%{mcpu=ultrasparc:-xarch=v8plusa} \
+ %{mcpu=ultrasparc3:-xarch=v8plusb} \
%{!mcpu*:%(asm_cpu_default)} \
"
diff -Nrc3pad gcc-3.3.4/gcc/config/sparc/sparc.c gcc-3.3.5/gcc/config/sparc/sparc.c
*** gcc-3.3.4/gcc/config/sparc/sparc.c 2004-05-31 21:45:32.000000000 +0000
--- gcc-3.3.5/gcc/config/sparc/sparc.c 2004-07-17 19:49:21.000000000 +0000
*************** sparc_va_arg (valist, type)
*** 5442,5459 ****
return addr_rtx;
}
/* Return the string to output a conditional branch to LABEL, which is
the operand number of the label. OP is the conditional expression.
XEXP (OP, 0) is assumed to be a condition code register (integer or
floating point) and its mode specifies what kind of comparison we made.
REVERSED is nonzero if we should reverse the sense of the comparison.
ANNUL is nonzero if we should generate an annulling branch.
! NOOP is nonzero if we have to follow this branch by a noop.
!
! INSN, if set, is the insn. */
char *
output_cbranch (op, dest, label, reversed, annul, noop, insn)
--- 5442,5521 ----
return addr_rtx;
}
+ /* Return the string to output an unconditional branch to LABEL, which is
+ the operand number of the label.
+
+ DEST is the destination insn (i.e. the label), INSN is the source. */
+
+ const char *
+ output_ubranch (dest, label, insn)
+ rtx dest;
+ int label;
+ rtx insn;
+ {
+ static char string[64];
+ bool noop = false;
+ char *p;
+
+ /* TurboSPARC is reported to have problems with
+ with
+ foo: b,a foo
+ i.e. an empty loop with the annul bit set. The workaround is to use
+ foo: b foo; nop
+ instead. */
+
+ if (! TARGET_V9 && flag_delayed_branch
+ && (INSN_ADDRESSES (INSN_UID (dest))
+ == INSN_ADDRESSES (INSN_UID (insn))))
+ {
+ strcpy (string, "b\t");
+ noop = true;
+ }
+ else
+ {
+ bool v9_form = false;
+
+ if (TARGET_V9 && INSN_ADDRESSES_SET_P ())
+ {
+ int delta = (INSN_ADDRESSES (INSN_UID (dest))
+ - INSN_ADDRESSES (INSN_UID (insn)));
+ /* Leave some instructions for "slop". */
+ if (delta >= -260000 && delta < 260000)
+ v9_form = true;
+ }
+
+ if (v9_form)
+ strcpy (string, "ba%*,pt\t%%xcc, ");
+ else
+ strcpy (string, "b%*\t");
+ }
+
+ p = strchr (string, '\0');
+ *p++ = '%';
+ *p++ = 'l';
+ *p++ = '0' + label;
+ *p++ = '%';
+ if (noop)
+ *p++ = '#';
+ else
+ *p++ = '(';
+ *p = '\0';
+
+ return string;
+ }
+
/* Return the string to output a conditional branch to LABEL, which is
the operand number of the label. OP is the conditional expression.
XEXP (OP, 0) is assumed to be a condition code register (integer or
floating point) and its mode specifies what kind of comparison we made.
+ DEST is the destination insn (i.e. the label), INSN is the source.
+
REVERSED is nonzero if we should reverse the sense of the comparison.
ANNUL is nonzero if we should generate an annulling branch.
! NOOP is nonzero if we have to follow this branch by a noop. */
char *
output_cbranch (op, dest, label, reversed, annul, noop, insn)
*************** output_cbranch (op, dest, label, reverse
*** 5491,5497 ****
nop
ba .LC29 */
! far = get_attr_length (insn) >= 3;
if (reversed ^ far)
{
/* Reversal of FP compares takes care -- an ordered compare
--- 5553,5559 ----
nop
ba .LC29 */
! far = TARGET_V9 && (get_attr_length (insn) >= 3);
if (reversed ^ far)
{
/* Reversal of FP compares takes care -- an ordered compare
*************** output_cbranch (op, dest, label, reverse
*** 5621,5629 ****
spaces -= 2;
}
! if (! TARGET_V9)
! labelno = "";
! else
{
rtx note;
int v8 = 0;
--- 5683,5689 ----
spaces -= 2;
}
! if (TARGET_V9)
{
rtx note;
int v8 = 0;
*************** output_cbranch (op, dest, label, reverse
*** 5673,5678 ****
--- 5733,5741 ----
spaces -= 3;
}
}
+ else
+ labelno = "";
+
if (spaces > 0)
*p++ = '\t';
else
*************** sparc_emit_floatunsdi (operands)
*** 5880,5885 ****
--- 5943,5950 ----
operand number of the reg. OP is the conditional expression. The mode
of REG says what kind of comparison we made.
+ DEST is the destination insn (i.e. the label), INSN is the source.
+
REVERSED is nonzero if we should reverse the sense of the comparison.
ANNUL is nonzero if we should generate an annulling branch.
diff -Nrc3pad gcc-3.3.4/gcc/config/sparc/sparc.md gcc-3.3.5/gcc/config/sparc/sparc.md
*** gcc-3.3.4/gcc/config/sparc/sparc.md 2004-05-31 21:45:33.000000000 +0000
--- gcc-3.3.5/gcc/config/sparc/sparc.md 2004-07-17 19:49:21.000000000 +0000
***************
*** 120,125 ****
--- 120,127 ----
(symbol_ref "TARGET_FLAT != 0"))
;; Length (in # of insns).
+ ;; Beware that setting a length greater or equal to 3 for conditional branches
+ ;; has a side-effect (see output_cbranch and output_v9branch).
(define_attr "length" ""
(cond [(eq_attr "type" "uncond_branch,call,sibcall")
(if_then_else (eq_attr "empty_delay_slot" "true")
***************
*** 7218,7244 ****
[(set_attr "type" "shift")])
;; Unconditional and other jump instructions
- ;; On the SPARC, by setting the annul bit on an unconditional branch, the
- ;; following insn is never executed. This saves us a nop. Dbx does not
- ;; handle such branches though, so we only use them when optimizing.
(define_insn "jump"
[(set (pc) (label_ref (match_operand 0 "" "")))]
""
! {
! /* TurboSPARC is reported to have problems with
! with
! foo: b,a foo
! i.e. an empty loop with the annul bit set. The workaround is to use
! foo: b foo; nop
! instead. */
!
! if (! TARGET_V9 && flag_delayed_branch
! && (INSN_ADDRESSES (INSN_UID (operands[0]))
! == INSN_ADDRESSES (INSN_UID (insn))))
! return "b\t%l0%#";
! else
! return TARGET_V9 ? "ba%*,pt\t%%xcc, %l0%(" : "b%*\t%l0%(";
! }
[(set_attr "type" "uncond_branch")])
(define_expand "tablejump"
--- 7220,7229 ----
[(set_attr "type" "shift")])
;; Unconditional and other jump instructions
(define_insn "jump"
[(set (pc) (label_ref (match_operand 0 "" "")))]
""
! "* return output_ubranch (operands[0], 0, insn);"
[(set_attr "type" "uncond_branch")])
(define_expand "tablejump"
diff -Nrc3pad gcc-3.3.4/gcc/config/sparc/sparc-protos.h gcc-3.3.5/gcc/config/sparc/sparc-protos.h
*** gcc-3.3.4/gcc/config/sparc/sparc-protos.h 2002-10-20 22:37:13.000000000 +0000
--- gcc-3.3.5/gcc/config/sparc/sparc-protos.h 2004-07-17 19:49:21.000000000 +0000
*************** extern void sparc_emit_set_const64 PARAM
*** 88,93 ****
--- 88,94 ----
extern void sparc_emit_set_symbolic_const64 PARAMS ((rtx, rtx, rtx));
extern int sparc_splitdi_legitimate PARAMS ((rtx, rtx));
extern int sparc_absnegfloat_split_legitimate PARAMS ((rtx, rtx));
+ extern const char *output_ubranch PARAMS ((rtx, int, rtx));
extern char *output_cbranch PARAMS ((rtx, rtx, int, int, int, int, rtx));
extern const char *output_sibcall PARAMS ((rtx, rtx));
extern char *output_v9branch PARAMS ((rtx, rtx, int, int, int, int, int,
diff -Nrc3pad gcc-3.3.4/gcc/convert.c gcc-3.3.5/gcc/convert.c
*** gcc-3.3.4/gcc/convert.c 2002-07-04 06:38:54.000000000 +0000
--- gcc-3.3.5/gcc/convert.c 2004-06-28 08:03:39.000000000 +0000
*************** convert_to_integer (type, expr)
*** 182,188 ****
we are truncating EXPR. */
else if (outprec >= inprec)
! return build1 (NOP_EXPR, type, expr);
/* If TYPE is an enumeral type or a type with a precision less
than the number of bits in its mode, do the conversion to the
--- 182,208 ----
we are truncating EXPR. */
else if (outprec >= inprec)
! {
! enum tree_code code;
!
! /* If the precision of the EXPR's type is K bits and the
! destination mode has more bits, and the sign is changing,
! it is not safe to use a NOP_EXPR. For example, suppose
! that EXPR's type is a 3-bit unsigned integer type, the
! TYPE is a 3-bit signed integer type, and the machine mode
! for the types is 8-bit QImode. In that case, the
! conversion necessitates an explicit sign-extension. In
! the signed-to-unsigned case the high-order bits have to
! be cleared. */
! if (TREE_UNSIGNED (type) != TREE_UNSIGNED (TREE_TYPE (expr))
! && (TYPE_PRECISION (TREE_TYPE (expr))
! != GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (expr)))))
! code = CONVERT_EXPR;
! else
! code = NOP_EXPR;
!
! return build1 (code, type, expr);
! }
/* If TYPE is an enumeral type or a type with a precision less
than the number of bits in its mode, do the conversion to the
diff -Nrc3pad gcc-3.3.4/gcc/c-parse.c gcc-3.3.5/gcc/c-parse.c
*** gcc-3.3.4/gcc/c-parse.c 2004-05-31 22:38:18.000000000 +0000
--- gcc-3.3.5/gcc/c-parse.c 2004-09-30 17:35:53.000000000 +0000
***************
*** 1,77 ****
! /* A Bison parser, made from c-parse.y
! by GNU bison 1.33. */
! #define YYBISON 1 /* Identify Bison output. */
! # define IDENTIFIER 257
! # define TYPENAME 258
! # define SCSPEC 259
! # define STATIC 260
! # define TYPESPEC 261
! # define TYPE_QUAL 262
! # define CONSTANT 263
! # define STRING 264
! # define ELLIPSIS 265
! # define SIZEOF 266
! # define ENUM 267
! # define STRUCT 268
! # define UNION 269
! # define IF 270
! # define ELSE 271
! # define WHILE 272
! # define DO 273
! # define FOR 274
! # define SWITCH 275
! # define CASE 276
! # define DEFAULT 277
! # define BREAK 278
! # define CONTINUE 279
! # define RETURN 280
! # define GOTO 281
! # define ASM_KEYWORD 282
! # define TYPEOF 283
! # define ALIGNOF 284
! # define ATTRIBUTE 285
! # define EXTENSION 286
! # define LABEL 287
! # define REALPART 288
! # define IMAGPART 289
! # define VA_ARG 290
! # define CHOOSE_EXPR 291
! # define TYPES_COMPATIBLE_P 292
! # define PTR_VALUE 293
! # define PTR_BASE 294
! # define PTR_EXTENT 295
! # define STRING_FUNC_NAME 296
! # define VAR_FUNC_NAME 297
! # define ASSIGN 298
! # define OROR 299
! # define ANDAND 300
! # define EQCOMPARE 301
! # define ARITHCOMPARE 302
! # define LSHIFT 303
! # define RSHIFT 304
! # define UNARY 305
! # define PLUSPLUS 306
! # define MINUSMINUS 307
! # define HYPERUNARY 308
! # define POINTSAT 309
! # define INTERFACE 310
! # define IMPLEMENTATION 311
! # define END 312
! # define SELECTOR 313
! # define DEFS 314
! # define ENCODE 315
! # define CLASSNAME 316
! # define PUBLIC 317
! # define PRIVATE 318
! # define PROTECTED 319
! # define PROTOCOL 320
! # define OBJECTNAME 321
! # define CLASS 322
! # define ALIAS 323
! #line 34 "c-parse.y"
#include "config.h"
#include "system.h"
--- 1,197 ----
! /* A Bison parser, made from c-parse.y, by GNU bison 1.75. */
! /* Skeleton parser for Yacc-like parsing with Bison,
! Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 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 2, 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 this program; if not, write to the Free Software
! Foundation, Inc., 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA. */
!
! /* As a special exception, when this file is copied by Bison into a
! Bison output file, you may use that output file without restriction.
! This special exception was added by the Free Software Foundation
! in version 1.24 of Bison. */
!
! /* Written by Richard Stallman by simplifying the original so called
! ``semantic'' parser. */
!
! /* All symbols defined below should begin with yy or YY, to avoid
! infringing on user name space. This should be done even for local
! variables, as they might otherwise be expanded by user macros.
! There are some unavoidable exceptions within include files to
! define necessary library symbols; they are noted "INFRINGES ON
! USER NAME SPACE" below. */
!
! /* Identify Bison output. */
! #define YYBISON 1
!
! /* Pure parsers. */
! #define YYPURE 0
!
! /* Using locations. */
! #define YYLSP_NEEDED 0
!
!
!
! /* Tokens. */
! #ifndef YYTOKENTYPE
! # define YYTOKENTYPE
! /* Put the tokens into the symbol table, so that GDB and other debuggers
! know about them. */
! enum yytokentype {
! IDENTIFIER = 258,
! TYPENAME = 259,
! SCSPEC = 260,
! STATIC = 261,
! TYPESPEC = 262,
! TYPE_QUAL = 263,
! CONSTANT = 264,
! STRING = 265,
! ELLIPSIS = 266,
! SIZEOF = 267,
! ENUM = 268,
! STRUCT = 269,
! UNION = 270,
! IF = 271,
! ELSE = 272,
! WHILE = 273,
! DO = 274,
! FOR = 275,
! SWITCH = 276,
! CASE = 277,
! DEFAULT = 278,
! BREAK = 279,
! CONTINUE = 280,
! RETURN = 281,
! GOTO = 282,
! ASM_KEYWORD = 283,
! TYPEOF = 284,
! ALIGNOF = 285,
! ATTRIBUTE = 286,
! EXTENSION = 287,
! LABEL = 288,
! REALPART = 289,
! IMAGPART = 290,
! VA_ARG = 291,
! CHOOSE_EXPR = 292,
! TYPES_COMPATIBLE_P = 293,
! PTR_VALUE = 294,
! PTR_BASE = 295,
! PTR_EXTENT = 296,
! STRING_FUNC_NAME = 297,
! VAR_FUNC_NAME = 298,
! ASSIGN = 299,
! OROR = 300,
! ANDAND = 301,
! EQCOMPARE = 302,
! ARITHCOMPARE = 303,
! RSHIFT = 304,
! LSHIFT = 305,
! MINUSMINUS = 306,
! PLUSPLUS = 307,
! UNARY = 308,
! HYPERUNARY = 309,
! POINTSAT = 310,
! INTERFACE = 311,
! IMPLEMENTATION = 312,
! END = 313,
! SELECTOR = 314,
! DEFS = 315,
! ENCODE = 316,
! CLASSNAME = 317,
! PUBLIC = 318,
! PRIVATE = 319,
! PROTECTED = 320,
! PROTOCOL = 321,
! OBJECTNAME = 322,
! CLASS = 323,
! ALIAS = 324
! };
! #endif
! #define IDENTIFIER 258
! #define TYPENAME 259
! #define SCSPEC 260
! #define STATIC 261
! #define TYPESPEC 262
! #define TYPE_QUAL 263
! #define CONSTANT 264
! #define STRING 265
! #define ELLIPSIS 266
! #define SIZEOF 267
! #define ENUM 268
! #define STRUCT 269
! #define UNION 270
! #define IF 271
! #define ELSE 272
! #define WHILE 273
! #define DO 274
! #define FOR 275
! #define SWITCH 276
! #define CASE 277
! #define DEFAULT 278
! #define BREAK 279
! #define CONTINUE 280
! #define RETURN 281
! #define GOTO 282
! #define ASM_KEYWORD 283
! #define TYPEOF 284
! #define ALIGNOF 285
! #define ATTRIBUTE 286
! #define EXTENSION 287
! #define LABEL 288
! #define REALPART 289
! #define IMAGPART 290
! #define VA_ARG 291
! #define CHOOSE_EXPR 292
! #define TYPES_COMPATIBLE_P 293
! #define PTR_VALUE 294
! #define PTR_BASE 295
! #define PTR_EXTENT 296
! #define STRING_FUNC_NAME 297
! #define VAR_FUNC_NAME 298
! #define ASSIGN 299
! #define OROR 300
! #define ANDAND 301
! #define EQCOMPARE 302
! #define ARITHCOMPARE 303
! #define RSHIFT 304
! #define LSHIFT 305
! #define MINUSMINUS 306
! #define PLUSPLUS 307
! #define UNARY 308
! #define HYPERUNARY 309
! #define POINTSAT 310
! #define INTERFACE 311
! #define IMPLEMENTATION 312
! #define END 313
! #define SELECTOR 314
! #define DEFS 315
! #define ENCODE 316
! #define CLASSNAME 317
! #define PUBLIC 318
! #define PRIVATE 319
! #define PROTECTED 320
! #define PROTOCOL 321
! #define OBJECTNAME 322
! #define CLASS 323
! #define ALIAS 324
!
!
!
! /* Copy the first part of user declarations. */
! #line 10 "c-parse.y"
#include "config.h"
#include "system.h"
*************** do { \
*** 138,150 ****
malloced_yyvs = (void *) newvs; \
} while (0)
! #line 103 "c-parse.y"
#ifndef YYSTYPE
typedef union {long itype; tree ttype; enum tree_code code;
const char *filename; int lineno; } yystype;
# define YYSTYPE yystype
#endif
! #line 237 "c-parse.y"
/* Number of statements (loosely speaking) and compound statements
seen so far. */
--- 258,301 ----
malloced_yyvs = (void *) newvs; \
} while (0)
!
! /* Enabling traces. */
! #ifndef YYDEBUG
! # define YYDEBUG 0
! #endif
!
! /* Enabling verbose error messages. */
! #ifdef YYERROR_VERBOSE
! # undef YYERROR_VERBOSE
! # define YYERROR_VERBOSE 1
! #else
! # define YYERROR_VERBOSE 0
! #endif
!
#ifndef YYSTYPE
+ #line 79 "c-parse.y"
typedef union {long itype; tree ttype; enum tree_code code;
const char *filename; int lineno; } yystype;
+ /* Line 193 of /usr/share/bison/yacc.c. */
+ #line 281 "c-p10012.c"
# define YYSTYPE yystype
+ # define YYSTYPE_IS_TRIVIAL 1
#endif
!
! #ifndef YYLTYPE
! typedef struct yyltype
! {
! int first_line;
! int first_column;
! int last_line;
! int last_column;
! } yyltype;
! # define YYLTYPE yyltype
! # define YYLTYPE_IS_TRIVIAL 1
! #endif
!
! /* Copy the second part of user declarations. */
! #line 202 "c-parse.y"
/* Number of statements (loosely speaking) and compound statements
seen so far. */
*************** c_parse_init ()
*** 228,259 ****
init_reswords ();
}
! #ifndef YYDEBUG
! # define YYDEBUG 0
#endif
! #define YYFINAL 896
! #define YYFLAG -32768
! #define YYNTBASE 92
! /* YYTRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */
! #define YYTRANSLATE(x) ((unsigned)(x) <= 323 ? yytranslate[x] : 293)
! /* YYTRANSLATE[YYLEX] -- Bison token number corresponding to YYLEX. */
! static const char yytranslate[] =
{
0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 88, 2, 2, 2, 61, 52, 2,
! 68, 84, 59, 57, 89, 58, 67, 60, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 47, 85,
! 2, 45, 2, 46, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 2, 69, 2, 91, 51, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 90, 50, 86, 87, 2, 2, 2,
--- 379,516 ----
init_reswords ();
}
!
!
! /* Line 213 of /usr/share/bison/yacc.c. */
! #line 386 "c-p10012.c"
!
! #if ! defined (yyoverflow) || YYERROR_VERBOSE
!
! /* The parser invokes alloca or malloc; define the necessary symbols. */
!
! # if YYSTACK_USE_ALLOCA
! # define YYSTACK_ALLOC alloca
! # else
! # ifndef YYSTACK_USE_ALLOCA
! # if defined (alloca) || defined (_ALLOCA_H)
! # define YYSTACK_ALLOC alloca
! # else
! # ifdef __GNUC__
! # define YYSTACK_ALLOC __builtin_alloca
! # endif
! # endif
! # endif
! # endif
!
! # ifdef YYSTACK_ALLOC
! /* Pacify GCC's `empty if-body' warning. */
! # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
! # else
! # if defined (__STDC__) || defined (__cplusplus)
! # include /* INFRINGES ON USER NAME SPACE */
! # define YYSIZE_T size_t
! # endif
! # define YYSTACK_ALLOC malloc
! # define YYSTACK_FREE free
! # endif
! #endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
!
!
! #if (! defined (yyoverflow) \
! && (! defined (__cplusplus) \
! || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
!
! /* A type that is properly aligned for any stack member. */
! union yyalloc
! {
! short yyss;
! YYSTYPE yyvs;
! };
!
! /* The size of the maximum gap between one aligned stack and the next. */
! # define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1)
!
! /* The size of an array large to enough to hold all stacks, each with
! N elements. */
! # define YYSTACK_BYTES(N) \
! ((N) * (sizeof (short) + sizeof (YYSTYPE)) \
! + YYSTACK_GAP_MAX)
!
! /* Copy COUNT objects from FROM to TO. The source and destination do
! not overlap. */
! # ifndef YYCOPY
! # if 1 < __GNUC__
! # define YYCOPY(To, From, Count) \
! __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
! # else
! # define YYCOPY(To, From, Count) \
! do \
! { \
! register YYSIZE_T yyi; \
! for (yyi = 0; yyi < (Count); yyi++) \
! (To)[yyi] = (From)[yyi]; \
! } \
! while (0)
! # endif
! # endif
!
! /* Relocate STACK from its old location to the new one. The
! local variables YYSIZE and YYSTACKSIZE give the old and new number of
! elements in the stack, and YYPTR gives the new location of the
! stack. Advance YYPTR to a properly aligned location for the next
! stack. */
! # define YYSTACK_RELOCATE(Stack) \
! do \
! { \
! YYSIZE_T yynewbytes; \
! YYCOPY (&yyptr->Stack, Stack, yysize); \
! Stack = &yyptr->Stack; \
! yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAX; \
! yyptr += yynewbytes / sizeof (*yyptr); \
! } \
! while (0)
!
#endif
+ #if defined (__STDC__) || defined (__cplusplus)
+ typedef signed char yysigned_char;
+ #else
+ typedef short yysigned_char;
+ #endif
+ /* YYFINAL -- State number of the termination state. */
+ #define YYFINAL 4
+ #define YYLAST 3120
! /* YYNTOKENS -- Number of terminals. */
! #define YYNTOKENS 92
! /* YYNNTS -- Number of nonterminals. */
! #define YYNNTS 202
! /* YYNRULES -- Number of rules. */
! #define YYNRULES 558
! /* YYNRULES -- Number of states. */
! #define YYNSTATES 896
! /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
! #define YYUNDEFTOK 2
! #define YYMAXUTOK 324
! #define YYTRANSLATE(X) \
! ((unsigned)(X) <= YYMAXUTOK ? yytranslate[X] : YYUNDEFTOK)
!
! /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
! static const unsigned char yytranslate[] =
{
0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 88, 2, 2, 2, 61, 52, 2,
! 67, 84, 59, 57, 89, 58, 66, 60, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 47, 85,
! 2, 44, 2, 46, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 2, 68, 2, 91, 51, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 90, 50, 86, 87, 2, 2, 2,
*************** static const char yytranslate[] =
*** 269,612 ****
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 2, 2, 2, 2, 2, 2, 1, 3, 4, 5,
! 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
! 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
! 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
! 36, 37, 38, 39, 40, 41, 42, 43, 44, 48,
! 49, 53, 54, 55, 56, 62, 63, 64, 65, 66,
! 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
! 80, 81, 82, 83
};
#if YYDEBUG
! static const short yyprhs[] =
{
! 0, 0, 1, 3, 4, 7, 8, 12, 14, 16,
! 18, 24, 27, 31, 36, 41, 44, 47, 50, 52,
! 53, 54, 64, 69, 70, 71, 81, 86, 87, 88,
! 97, 101, 103, 105, 107, 109, 111, 113, 115, 117,
! 119, 121, 122, 124, 126, 130, 132, 135, 138, 141,
! 144, 147, 152, 155, 160, 163, 166, 168, 170, 172,
! 174, 179, 181, 185, 189, 193, 197, 201, 205, 209,
! 213, 217, 221, 225, 229, 230, 235, 236, 241, 242,
! 243, 251, 252, 258, 262, 266, 268, 270, 272, 274,
! 275, 283, 287, 291, 295, 299, 304, 311, 320, 327,
! 332, 336, 340, 343, 346, 348, 349, 351, 355, 357,
! 359, 362, 365, 370, 375, 378, 381, 385, 386, 388,
! 393, 398, 402, 406, 409, 412, 414, 417, 420, 423,
! 426, 429, 431, 434, 436, 439, 442, 445, 448, 451,
! 454, 456, 459, 462, 465, 468, 471, 474, 477, 480,
! 483, 486, 489, 492, 495, 498, 501, 504, 506, 509,
512, 515, 518, 521, 524, 527, 530, 533, 536, 539,
542, 545, 548, 551, 554, 557, 560, 563, 566, 569,
572, 575, 578, 581, 584, 587, 590, 593, 596, 599,
602, 605, 608, 611, 614, 617, 620, 623, 626, 629,
! 632, 635, 638, 640, 642, 644, 646, 648, 650, 652,
! 654, 656, 658, 660, 662, 664, 666, 668, 670, 672,
! 674, 676, 678, 680, 682, 684, 686, 688, 690, 692,
! 694, 696, 698, 700, 702, 704, 706, 708, 710, 712,
! 714, 716, 718, 720, 722, 724, 726, 728, 730, 732,
! 734, 736, 738, 740, 742, 744, 746, 748, 750, 751,
! 753, 755, 757, 759, 761, 763, 765, 767, 772, 777,
! 779, 784, 786, 791, 792, 797, 798, 805, 809, 810,
! 817, 821, 822, 824, 826, 829, 836, 838, 842, 843,
! 845, 850, 857, 862, 864, 866, 868, 870, 872, 874,
! 876, 877, 882, 884, 885, 888, 890, 894, 898, 901,
! 902, 907, 909, 910, 915, 917, 919, 921, 924, 927,
! 933, 937, 938, 939, 947, 948, 949, 957, 959, 961,
! 966, 970, 973, 977, 979, 981, 983, 987, 990, 992,
! 996, 999, 1003, 1007, 1012, 1016, 1021, 1025, 1028, 1030,
! 1032, 1035, 1037, 1040, 1042, 1045, 1046, 1054, 1060, 1061,
! 1069, 1075, 1076, 1085, 1086, 1094, 1097, 1100, 1103, 1104,
! 1106, 1107, 1109, 1111, 1114, 1115, 1119, 1122, 1126, 1131,
! 1135, 1137, 1139, 1142, 1144, 1149, 1151, 1156, 1161, 1168,
! 1174, 1179, 1186, 1192, 1194, 1198, 1200, 1202, 1206, 1207,
! 1211, 1212, 1214, 1215, 1217, 1220, 1222, 1224, 1226, 1230,
! 1233, 1237, 1242, 1246, 1249, 1252, 1254, 1259, 1263, 1268,
! 1274, 1280, 1282, 1284, 1286, 1288, 1290, 1293, 1296, 1299,
! 1302, 1304, 1307, 1310, 1313, 1315, 1318, 1321, 1324, 1327,
! 1329, 1332, 1334, 1336, 1338, 1340, 1343, 1344, 1345, 1346,
! 1347, 1348, 1350, 1352, 1355, 1359, 1361, 1364, 1366, 1368,
! 1374, 1376, 1378, 1381, 1384, 1387, 1390, 1391, 1397, 1398,
! 1403, 1404, 1405, 1407, 1410, 1414, 1418, 1422, 1423, 1428,
! 1430, 1434, 1435, 1436, 1444, 1450, 1453, 1454, 1455, 1456,
! 1457, 1470, 1471, 1478, 1481, 1483, 1485, 1488, 1492, 1495,
! 1498, 1501, 1505, 1512, 1521, 1532, 1545, 1549, 1554, 1556,
! 1560, 1566, 1569, 1575, 1576, 1578, 1579, 1581, 1582, 1584,
! 1586, 1590, 1595, 1603, 1605, 1609, 1610, 1614, 1617, 1618,
! 1619, 1626, 1629, 1630, 1632, 1634, 1638, 1640, 1644, 1649,
! 1654, 1658, 1663, 1667, 1672, 1677, 1681, 1686, 1690, 1692,
! 1693, 1697, 1699, 1702, 1704, 1708, 1710, 1714
};
static const short yyrhs[] =
{
! -1, 93, 0, 0, 94, 96, 0, 0, 93, 95,
! 96, 0, 97, 0, 99, 0, 98, 0, 28, 68,
! 108, 84, 85, 0, 292, 96, 0, 130, 164, 85,
! 0, 150, 130, 164, 85, 0, 149, 130, 163, 85,
! 0, 156, 85, 0, 1, 85, 0, 1, 86, 0,
! 85, 0, 0, 0, 149, 130, 193, 100, 124, 101,
! 253, 254, 242, 0, 149, 130, 193, 1, 0, 0,
! 0, 150, 130, 198, 102, 124, 103, 253, 254, 242,
! 0, 150, 130, 198, 1, 0, 0, 0, 130, 198,
! 104, 124, 105, 253, 254, 242, 0, 130, 198, 1,
! 0, 3, 0, 4, 0, 52, 0, 58, 0, 57,
! 0, 63, 0, 64, 0, 87, 0, 88, 0, 110,
! 0, 0, 110, 0, 116, 0, 110, 89, 116, 0,
! 122, 0, 59, 115, 0, 292, 115, 0, 107, 115,
! 0, 49, 106, 0, 112, 111, 0, 112, 68, 219,
! 84, 0, 113, 111, 0, 113, 68, 219, 84, 0,
! 34, 115, 0, 35, 115, 0, 12, 0, 30, 0,
! 29, 0, 111, 0, 68, 219, 84, 115, 0, 115,
! 0, 116, 57, 116, 0, 116, 58, 116, 0, 116,
! 59, 116, 0, 116, 60, 116, 0, 116, 61, 116,
! 0, 116, 55, 116, 0, 116, 56, 116, 0, 116,
! 54, 116, 0, 116, 53, 116, 0, 116, 52, 116,
! 0, 116, 50, 116, 0, 116, 51, 116, 0, 0,
! 116, 49, 117, 116, 0, 0, 116, 48, 118, 116,
! 0, 0, 0, 116, 46, 119, 108, 47, 120, 116,
! 0, 0, 116, 46, 121, 47, 116, 0, 116, 45,
! 116, 0, 116, 44, 116, 0, 3, 0, 9, 0,
! 10, 0, 43, 0, 0, 68, 219, 84, 90, 123,
! 179, 86, 0, 68, 108, 84, 0, 68, 1, 84,
! 0, 246, 244, 84, 0, 246, 1, 84, 0, 122,
! 68, 109, 84, 0, 36, 68, 116, 89, 219, 84,
! 0, 37, 68, 116, 89, 116, 89, 116, 84, 0,
! 38, 68, 219, 89, 219, 84, 0, 122, 69, 108,
! 91, 0, 122, 67, 106, 0, 122, 66, 106, 0,
! 122, 63, 0, 122, 64, 0, 125, 0, 0, 127,
! 0, 253, 254, 128, 0, 126, 0, 234, 0, 127,
! 126, 0, 126, 234, 0, 151, 130, 163, 85, 0,
! 152, 130, 164, 85, 0, 151, 85, 0, 152, 85,
! 0, 253, 254, 132, 0, 0, 170, 0, 149, 130,
! 163, 85, 0, 150, 130, 164, 85, 0, 149, 130,
! 187, 0, 150, 130, 190, 0, 156, 85, 0, 292,
! 132, 0, 8, 0, 133, 8, 0, 134, 8, 0,
! 133, 171, 0, 135, 8, 0, 136, 8, 0, 171,
! 0, 135, 171, 0, 158, 0, 137, 8, 0, 138,
! 8, 0, 137, 160, 0, 138, 160, 0, 133, 158,
! 0, 134, 158, 0, 159, 0, 137, 171, 0, 137,
! 161, 0, 138, 161, 0, 133, 159, 0, 134, 159,
! 0, 139, 8, 0, 140, 8, 0, 139, 160, 0,
! 140, 160, 0, 135, 158, 0, 136, 158, 0, 139,
! 171, 0, 139, 161, 0, 140, 161, 0, 135, 159,
! 0, 136, 159, 0, 176, 0, 141, 8, 0, 142,
! 8, 0, 133, 176, 0, 134, 176, 0, 141, 176,
! 0, 142, 176, 0, 141, 171, 0, 143, 8, 0,
! 144, 8, 0, 135, 176, 0, 136, 176, 0, 143,
! 176, 0, 144, 176, 0, 143, 171, 0, 145, 8,
! 0, 146, 8, 0, 145, 160, 0, 146, 160, 0,
! 141, 158, 0, 142, 158, 0, 137, 176, 0, 138,
! 176, 0, 145, 176, 0, 146, 176, 0, 145, 171,
! 0, 145, 161, 0, 146, 161, 0, 141, 159, 0,
! 142, 159, 0, 147, 8, 0, 148, 8, 0, 147,
! 160, 0, 148, 160, 0, 143, 158, 0, 144, 158,
! 0, 139, 176, 0, 140, 176, 0, 147, 176, 0,
! 148, 176, 0, 147, 171, 0, 147, 161, 0, 148,
! 161, 0, 143, 159, 0, 144, 159, 0, 137, 0,
! 138, 0, 139, 0, 140, 0, 145, 0, 146, 0,
! 147, 0, 148, 0, 133, 0, 134, 0, 135, 0,
! 136, 0, 141, 0, 142, 0, 143, 0, 144, 0,
! 137, 0, 138, 0, 145, 0, 146, 0, 133, 0,
! 134, 0, 141, 0, 142, 0, 137, 0, 138, 0,
! 139, 0, 140, 0, 133, 0, 134, 0, 135, 0,
! 136, 0, 137, 0, 138, 0, 139, 0, 140, 0,
! 133, 0, 134, 0, 135, 0, 136, 0, 133, 0,
! 134, 0, 135, 0, 136, 0, 137, 0, 138, 0,
! 139, 0, 140, 0, 141, 0, 142, 0, 143, 0,
! 144, 0, 145, 0, 146, 0, 147, 0, 148, 0,
! 0, 154, 0, 160, 0, 162, 0, 161, 0, 7,
! 0, 207, 0, 202, 0, 4, 0, 114, 68, 108,
! 84, 0, 114, 68, 219, 84, 0, 166, 0, 163,
! 89, 131, 166, 0, 168, 0, 164, 89, 131, 168,
! 0, 0, 28, 68, 10, 84, 0, 0, 193, 165,
! 170, 45, 167, 177, 0, 193, 165, 170, 0, 0,
! 198, 165, 170, 45, 169, 177, 0, 198, 165, 170,
! 0, 0, 171, 0, 172, 0, 171, 172, 0, 31,
! 68, 68, 173, 84, 84, 0, 174, 0, 173, 89,
! 174, 0, 0, 175, 0, 175, 68, 3, 84, 0,
! 175, 68, 3, 89, 110, 84, 0, 175, 68, 109,
! 84, 0, 106, 0, 176, 0, 7, 0, 8, 0,
! 6, 0, 5, 0, 116, 0, 0, 90, 178, 179,
! 86, 0, 1, 0, 0, 180, 208, 0, 181, 0,
! 180, 89, 181, 0, 185, 45, 183, 0, 186, 183,
! 0, 0, 106, 47, 182, 183, 0, 183, 0, 0,
! 90, 184, 179, 86, 0, 116, 0, 1, 0, 186,
! 0, 185, 186, 0, 67, 106, 0, 69, 116, 11,
! 116, 91, 0, 69, 116, 91, 0, 0, 0, 193,
! 188, 124, 189, 253, 254, 247, 0, 0, 0, 198,
! 191, 124, 192, 253, 254, 247, 0, 194, 0, 198,
! 0, 68, 170, 194, 84, 0, 194, 68, 287, 0,
! 194, 227, 0, 59, 157, 194, 0, 4, 0, 196,
! 0, 197, 0, 196, 68, 287, 0, 196, 227, 0,
! 4, 0, 197, 68, 287, 0, 197, 227, 0, 59,
! 157, 196, 0, 59, 157, 197, 0, 68, 170, 197,
! 84, 0, 198, 68, 287, 0, 68, 170, 198, 84,
! 0, 59, 157, 198, 0, 198, 227, 0, 3, 0,
! 14, 0, 14, 171, 0, 15, 0, 15, 171, 0,
! 13, 0, 13, 171, 0, 0, 199, 106, 90, 203,
! 210, 86, 170, 0, 199, 90, 210, 86, 170, 0,
! 0, 200, 106, 90, 204, 210, 86, 170, 0, 200,
! 90, 210, 86, 170, 0, 0, 201, 106, 90, 205,
! 217, 209, 86, 170, 0, 0, 201, 90, 206, 217,
! 209, 86, 170, 0, 199, 106, 0, 200, 106, 0,
! 201, 106, 0, 0, 89, 0, 0, 89, 0, 211,
! 0, 211, 212, 0, 0, 211, 212, 85, 0, 211,
! 85, 0, 153, 130, 213, 0, 153, 130, 253, 254,
! 0, 154, 130, 214, 0, 154, 0, 1, 0, 292,
! 212, 0, 215, 0, 213, 89, 131, 215, 0, 216,
! 0, 214, 89, 131, 216, 0, 253, 254, 193, 170,
! 0, 253, 254, 193, 47, 116, 170, 0, 253, 254,
! 47, 116, 170, 0, 253, 254, 198, 170, 0, 253,
! 254, 198, 47, 116, 170, 0, 253, 254, 47, 116,
! 170, 0, 218, 0, 217, 89, 218, 0, 1, 0,
! 106, 0, 106, 45, 116, 0, 0, 155, 220, 221,
! 0, 0, 223, 0, 0, 223, 0, 224, 171, 0,
! 225, 0, 224, 0, 226, 0, 59, 157, 224, 0,
! 59, 157, 0, 59, 157, 225, 0, 68, 170, 223,
! 84, 0, 226, 68, 277, 0, 226, 227, 0, 68,
! 277, 0, 227, 0, 69, 157, 108, 91, 0, 69,
! 157, 91, 0, 69, 157, 59, 91, 0, 69, 6,
! 157, 108, 91, 0, 69, 154, 6, 108, 91, 0,
! 229, 0, 230, 0, 231, 0, 232, 0, 257, 0,
! 229, 257, 0, 230, 257, 0, 231, 257, 0, 232,
! 257, 0, 129, 0, 229, 129, 0, 230, 129, 0,
! 232, 129, 0, 258, 0, 229, 258, 0, 230, 258,
! 0, 231, 258, 0, 232, 258, 0, 234, 0, 233,
! 234, 0, 229, 0, 230, 0, 231, 0, 232, 0,
! 1, 85, 0, 0, 0, 0, 0, 0, 240, 0,
! 241, 0, 240, 241, 0, 33, 291, 85, 0, 247,
! 0, 1, 247, 0, 90, 0, 86, 0, 235, 239,
! 245, 86, 236, 0, 228, 0, 1, 0, 68, 90,
! 0, 243, 244, 0, 249, 256, 0, 249, 1, 0,
! 0, 16, 250, 68, 108, 84, 0, 0, 19, 252,
! 256, 18, 0, 0, 0, 257, 0, 258, 255, 0,
! 237, 255, 238, 0, 253, 254, 269, 0, 253, 254,
! 270, 0, 0, 248, 17, 260, 256, 0, 248, 0,
! 248, 17, 1, 0, 0, 0, 18, 261, 68, 108,
! 84, 262, 256, 0, 251, 68, 108, 84, 85, 0,
! 251, 1, 0, 0, 0, 0, 0, 20, 263, 68,
! 268, 264, 272, 85, 265, 272, 84, 266, 256, 0,
! 0, 21, 68, 108, 84, 267, 256, 0, 272, 85,
! 0, 132, 0, 247, 0, 108, 85, 0, 237, 259,
! 238, 0, 24, 85, 0, 25, 85, 0, 26, 85,
! 0, 26, 108, 85, 0, 28, 271, 68, 108, 84,
! 85, 0, 28, 271, 68, 108, 47, 273, 84, 85,
! 0, 28, 271, 68, 108, 47, 273, 47, 273, 84,
! 85, 0, 28, 271, 68, 108, 47, 273, 47, 273,
! 47, 276, 84, 85, 0, 27, 106, 85, 0, 27,
! 59, 108, 85, 0, 85, 0, 22, 116, 47, 0,
! 22, 116, 11, 116, 47, 0, 23, 47, 0, 106,
! 253, 254, 47, 170, 0, 0, 8, 0, 0, 108,
! 0, 0, 274, 0, 275, 0, 274, 89, 275, 0,
! 10, 68, 108, 84, 0, 69, 106, 91, 10, 68,
! 108, 84, 0, 10, 0, 276, 89, 10, 0, 0,
! 170, 278, 279, 0, 282, 84, 0, 0, 0, 283,
! 85, 280, 170, 281, 279, 0, 1, 84, 0, 0,
! 11, 0, 283, 0, 283, 89, 11, 0, 285, 0,
! 283, 89, 284, 0, 149, 130, 195, 170, 0, 149,
! 130, 198, 170, 0, 149, 130, 222, 0, 150, 130,
! 198, 170, 0, 150, 130, 222, 0, 151, 286, 195,
! 170, 0, 151, 286, 198, 170, 0, 151, 286, 222,
! 0, 152, 286, 198, 170, 0, 152, 286, 222, 0,
! 130, 0, 0, 170, 288, 289, 0, 279, 0, 290,
! 84, 0, 3, 0, 290, 89, 3, 0, 106, 0,
! 291, 89, 106, 0, 32, 0
};
! #endif
!
! #if YYDEBUG
! /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
! static const short yyrline[] =
{
! 0, 323, 328, 346, 346, 348, 348, 351, 356, 358,
! 359, 367, 371, 379, 381, 383, 385, 386, 387, 392,
! 392, 392, 405, 407, 407, 407, 419, 421, 421, 421,
! 433, 437, 439, 442, 444, 446, 451, 453, 455, 457,
! 461, 465, 468, 471, 474, 478, 480, 483, 486, 490,
! 492, 498, 501, 504, 507, 509, 513, 517, 521, 525,
! 527, 531, 533, 535, 537, 539, 541, 543, 545, 547,
! 549, 551, 553, 555, 557, 557, 564, 564, 571, 571,
! 571, 581, 581, 592, 599, 610, 617, 618, 620, 622,
! 622, 635, 640, 642, 658, 665, 667, 670, 680, 690,
! 692, 696, 702, 704, 709, 716, 724, 730, 735, 737,
! 738, 739, 746, 749, 751, 754, 762, 771, 781, 786,
! 789, 791, 793, 795, 797, 853, 857, 860, 865, 871,
! 875, 880, 884, 889, 893, 896, 899, 902, 905, 908,
! 913, 917, 920, 923, 926, 929, 934, 938, 941, 944,
! 947, 950, 955, 959, 962, 965, 968, 973, 977, 980,
! 983, 989, 995, 1001, 1009, 1015, 1019, 1022, 1028, 1034,
! 1040, 1048, 1054, 1058, 1061, 1064, 1067, 1070, 1073, 1079,
! 1085, 1091, 1099, 1103, 1106, 1109, 1112, 1117, 1121, 1124,
! 1127, 1130, 1133, 1136, 1142, 1148, 1154, 1162, 1166, 1169,
! 1172, 1175, 1181, 1183, 1184, 1185, 1186, 1187, 1188, 1189,
! 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1203, 1205,
! 1206, 1207, 1210, 1212, 1213, 1214, 1217, 1219, 1220, 1221,
! 1224, 1226, 1227, 1228, 1231, 1233, 1234, 1235, 1236, 1237,
! 1238, 1239, 1242, 1244, 1245, 1246, 1247, 1248, 1249, 1250,
! 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1262, 1265,
! 1290, 1292, 1295, 1299, 1302, 1305, 1309, 1314, 1316, 1322,
! 1324, 1327, 1329, 1332, 1335, 1339, 1339, 1348, 1355, 1355,
! 1364, 1371, 1374, 1378, 1381, 1385, 1390, 1393, 1397, 1400,
! 1402, 1404, 1406, 1413, 1415, 1416, 1417, 1420, 1422, 1427,
! 1429, 1429, 1433, 1438, 1442, 1445, 1447, 1452, 1456, 1459,
! 1459, 1465, 1468, 1468, 1473, 1475, 1478, 1480, 1483, 1486,
! 1490, 1494, 1494, 1494, 1525, 1525, 1525, 1559, 1561, 1566,
! 1569, 1574, 1576, 1578, 1585, 1587, 1590, 1596, 1598, 1601,
! 1607, 1609, 1611, 1613, 1620, 1626, 1628, 1630, 1632, 1635,
! 1638, 1642, 1645, 1649, 1652, 1662, 1662, 1669, 1673, 1673,
! 1677, 1681, 1681, 1686, 1686, 1693, 1696, 1698, 1706, 1708,
! 1711, 1713, 1718, 1721, 1726, 1728, 1730, 1735, 1739, 1749,
! 1752, 1757, 1759, 1764, 1766, 1770, 1772, 1776, 1780, 1784,
! 1789, 1793, 1797, 1807, 1809, 1814, 1819, 1822, 1826, 1826,
! 1834, 1837, 1840, 1845, 1849, 1855, 1857, 1860, 1862, 1866,
! 1869, 1873, 1876, 1878, 1880, 1882, 1888, 1891, 1893, 1895,
! 1898, 1908, 1910, 1911, 1915, 1918, 1920, 1921, 1922, 1923,
! 1926, 1928, 1931, 1932, 1935, 1937, 1938, 1939, 1940, 1943,
! 1945, 1948, 1950, 1951, 1952, 1955, 1958, 1965, 1970, 1986,
! 2001, 2003, 2008, 2010, 2013, 2027, 2030, 2033, 2037, 2039,
! 2046, 2048, 2051, 2069, 2076, 2082, 2085, 2085, 2107, 2107,
! 2127, 2133, 2139, 2141, 2145, 2151, 2165, 2174, 2174, 2183,
! 2195, 2205, 2205, 2205, 2215, 2218, 2220, 2220, 2220, 2220,
! 2220, 2235, 2235, 2242, 2245, 2250, 2253, 2256, 2260, 2263,
! 2266, 2269, 2272, 2276, 2280, 2285, 2289, 2301, 2307, 2315,
! 2318, 2321, 2324, 2339, 2343, 2347, 2350, 2355, 2357, 2360,
! 2362, 2366, 2369, 2375, 2378, 2387, 2387, 2398, 2400, 2400,
! 2400, 2413, 2419, 2421, 2431, 2435, 2439, 2442, 2448, 2454,
! 2459, 2462, 2468, 2475, 2481, 2486, 2489, 2495, 2500, 2509,
! 2509, 2520, 2522, 2539, 2542, 2547, 2550, 2554
};
#endif
!
! #if (YYDEBUG) || defined YYERROR_VERBOSE
!
! /* YYTNAME[TOKEN_NUM] -- String name of the token TOKEN_NUM. */
static const char *const yytname[] =
{
! "$", "error", "$undefined.", "IDENTIFIER", "TYPENAME", "SCSPEC", "STATIC",
! "TYPESPEC", "TYPE_QUAL", "CONSTANT", "STRING", "ELLIPSIS", "SIZEOF",
! "ENUM", "STRUCT", "UNION", "IF", "ELSE", "WHILE", "DO", "FOR", "SWITCH",
! "CASE", "DEFAULT", "BREAK", "CONTINUE", "RETURN", "GOTO", "ASM_KEYWORD",
! "TYPEOF", "ALIGNOF", "ATTRIBUTE", "EXTENSION", "LABEL", "REALPART",
! "IMAGPART", "VA_ARG", "CHOOSE_EXPR", "TYPES_COMPATIBLE_P", "PTR_VALUE",
! "PTR_BASE", "PTR_EXTENT", "STRING_FUNC_NAME", "VAR_FUNC_NAME", "ASSIGN",
! "'='", "'?'", "':'", "OROR", "ANDAND", "'|'", "'^'", "'&'", "EQCOMPARE",
! "ARITHCOMPARE", "LSHIFT", "RSHIFT", "'+'", "'-'", "'*'", "'/'", "'%'",
! "UNARY", "PLUSPLUS", "MINUSMINUS", "HYPERUNARY", "POINTSAT", "'.'",
! "'('", "'['", "INTERFACE", "IMPLEMENTATION", "END", "SELECTOR", "DEFS",
! "ENCODE", "CLASSNAME", "PUBLIC", "PRIVATE", "PROTECTED", "PROTOCOL",
! "OBJECTNAME", "CLASS", "ALIAS", "')'", "';'", "'}'", "'~'", "'!'",
! "','", "'{'", "']'", "program", "extdefs", "@1", "@2", "extdef",
! "extdef_1", "datadef", "fndef", "@3", "@4", "@5", "@6", "@7", "@8",
! "identifier", "unop", "expr", "exprlist", "nonnull_exprlist",
! "unary_expr", "sizeof", "alignof", "typeof", "cast_expr",
! "expr_no_commas", "@9", "@10", "@11", "@12", "@13", "primary", "@14",
! "old_style_parm_decls", "old_style_parm_decls_1", "lineno_datadecl",
! "datadecls", "datadecl", "lineno_decl", "setspecs", "maybe_resetattrs",
! "decl", "declspecs_nosc_nots_nosa_noea", "declspecs_nosc_nots_nosa_ea",
"declspecs_nosc_nots_sa_noea", "declspecs_nosc_nots_sa_ea",
"declspecs_nosc_ts_nosa_noea", "declspecs_nosc_ts_nosa_ea",
"declspecs_nosc_ts_sa_noea", "declspecs_nosc_ts_sa_ea",
--- 526,870 ----
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
! 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
! 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
! 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
! 35, 36, 37, 38, 39, 40, 41, 42, 43, 45,
! 48, 49, 53, 54, 55, 56, 62, 63, 64, 65,
! 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
! 79, 80, 81, 82, 83
};
#if YYDEBUG
! /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
! YYRHS. */
! static const unsigned short yyprhs[] =
{
! 0, 0, 3, 4, 6, 7, 10, 11, 15, 17,
! 19, 21, 27, 30, 34, 39, 44, 47, 50, 53,
! 55, 56, 57, 67, 72, 73, 74, 84, 89, 90,
! 91, 100, 104, 106, 108, 110, 112, 114, 116, 118,
! 120, 122, 124, 125, 127, 129, 133, 135, 138, 141,
! 144, 147, 150, 155, 158, 163, 166, 169, 171, 173,
! 175, 177, 182, 184, 188, 192, 196, 200, 204, 208,
! 212, 216, 220, 224, 228, 232, 233, 238, 239, 244,
! 245, 246, 254, 255, 261, 265, 269, 271, 273, 275,
! 277, 278, 286, 290, 294, 298, 302, 307, 314, 323,
! 330, 335, 339, 343, 346, 349, 351, 352, 354, 358,
! 360, 362, 365, 368, 373, 378, 381, 384, 388, 389,
! 391, 396, 401, 405, 409, 412, 415, 417, 420, 423,
! 426, 429, 432, 434, 437, 439, 442, 445, 448, 451,
! 454, 457, 459, 462, 465, 468, 471, 474, 477, 480,
! 483, 486, 489, 492, 495, 498, 501, 504, 507, 509,
512, 515, 518, 521, 524, 527, 530, 533, 536, 539,
542, 545, 548, 551, 554, 557, 560, 563, 566, 569,
572, 575, 578, 581, 584, 587, 590, 593, 596, 599,
602, 605, 608, 611, 614, 617, 620, 623, 626, 629,
! 632, 635, 638, 641, 643, 645, 647, 649, 651, 653,
! 655, 657, 659, 661, 663, 665, 667, 669, 671, 673,
! 675, 677, 679, 681, 683, 685, 687, 689, 691, 693,
! 695, 697, 699, 701, 703, 705, 707, 709, 711, 713,
! 715, 717, 719, 721, 723, 725, 727, 729, 731, 733,
! 735, 737, 739, 741, 743, 745, 747, 749, 751, 753,
! 754, 756, 758, 760, 762, 764, 766, 768, 770, 775,
! 780, 782, 787, 789, 794, 795, 800, 801, 808, 812,
! 813, 820, 824, 825, 827, 829, 832, 839, 841, 845,
! 846, 848, 853, 860, 865, 867, 869, 871, 873, 875,
! 877, 879, 880, 885, 887, 888, 891, 893, 897, 901,
! 904, 905, 910, 912, 913, 918, 920, 922, 924, 927,
! 930, 936, 940, 941, 942, 950, 951, 952, 960, 962,
! 964, 969, 973, 976, 980, 982, 984, 986, 990, 993,
! 995, 999, 1002, 1006, 1010, 1015, 1019, 1024, 1028, 1031,
! 1033, 1035, 1038, 1040, 1043, 1045, 1048, 1049, 1057, 1063,
! 1064, 1072, 1078, 1079, 1088, 1089, 1097, 1100, 1103, 1106,
! 1107, 1109, 1110, 1112, 1114, 1117, 1118, 1122, 1125, 1129,
! 1134, 1138, 1140, 1142, 1145, 1147, 1152, 1154, 1159, 1164,
! 1171, 1177, 1182, 1189, 1195, 1197, 1201, 1203, 1205, 1209,
! 1210, 1214, 1215, 1217, 1218, 1220, 1223, 1225, 1227, 1229,
! 1233, 1236, 1240, 1245, 1249, 1252, 1255, 1257, 1262, 1266,
! 1271, 1277, 1283, 1285, 1287, 1289, 1291, 1293, 1296, 1299,
! 1302, 1305, 1307, 1310, 1313, 1316, 1318, 1321, 1324, 1327,
! 1330, 1332, 1335, 1337, 1339, 1341, 1343, 1346, 1347, 1348,
! 1349, 1350, 1351, 1353, 1355, 1358, 1362, 1364, 1367, 1369,
! 1371, 1377, 1379, 1381, 1384, 1387, 1390, 1393, 1394, 1400,
! 1401, 1406, 1407, 1408, 1410, 1413, 1417, 1421, 1425, 1426,
! 1431, 1433, 1437, 1438, 1439, 1447, 1453, 1456, 1457, 1458,
! 1459, 1460, 1473, 1474, 1481, 1484, 1486, 1488, 1491, 1495,
! 1498, 1501, 1504, 1508, 1515, 1524, 1535, 1548, 1552, 1557,
! 1559, 1563, 1569, 1572, 1578, 1579, 1581, 1582, 1584, 1585,
! 1587, 1589, 1593, 1598, 1606, 1608, 1612, 1613, 1617, 1620,
! 1621, 1622, 1629, 1632, 1633, 1635, 1637, 1641, 1643, 1647,
! 1652, 1657, 1661, 1666, 1670, 1675, 1680, 1684, 1689, 1693,
! 1695, 1696, 1700, 1702, 1705, 1707, 1711, 1713, 1717
};
+
+ /* YYRHS -- A `-1'-separated list of the rules' RHS. */
static const short yyrhs[] =
{
! 93, 0, -1, -1, 94, -1, -1, 95, 97, -1,
! -1, 94, 96, 97, -1, 98, -1, 100, -1, 99,
! -1, 28, 67, 109, 84, 85, -1, 293, 97, -1,
! 131, 165, 85, -1, 151, 131, 165, 85, -1, 150,
! 131, 164, 85, -1, 157, 85, -1, 1, 85, -1,
! 1, 86, -1, 85, -1, -1, -1, 150, 131, 194,
! 101, 125, 102, 254, 255, 243, -1, 150, 131, 194,
! 1, -1, -1, -1, 151, 131, 199, 103, 125, 104,
! 254, 255, 243, -1, 151, 131, 199, 1, -1, -1,
! -1, 131, 199, 105, 125, 106, 254, 255, 243, -1,
! 131, 199, 1, -1, 3, -1, 4, -1, 52, -1,
! 58, -1, 57, -1, 63, -1, 62, -1, 87, -1,
! 88, -1, 111, -1, -1, 111, -1, 117, -1, 111,
! 89, 117, -1, 123, -1, 59, 116, -1, 293, 116,
! -1, 108, 116, -1, 49, 107, -1, 113, 112, -1,
! 113, 67, 220, 84, -1, 114, 112, -1, 114, 67,
! 220, 84, -1, 34, 116, -1, 35, 116, -1, 12,
! -1, 30, -1, 29, -1, 112, -1, 67, 220, 84,
! 116, -1, 116, -1, 117, 57, 117, -1, 117, 58,
! 117, -1, 117, 59, 117, -1, 117, 60, 117, -1,
! 117, 61, 117, -1, 117, 56, 117, -1, 117, 55,
! 117, -1, 117, 54, 117, -1, 117, 53, 117, -1,
! 117, 52, 117, -1, 117, 50, 117, -1, 117, 51,
! 117, -1, -1, 117, 49, 118, 117, -1, -1, 117,
! 48, 119, 117, -1, -1, -1, 117, 46, 120, 109,
! 47, 121, 117, -1, -1, 117, 46, 122, 47, 117,
! -1, 117, 44, 117, -1, 117, 45, 117, -1, 3,
! -1, 9, -1, 10, -1, 43, -1, -1, 67, 220,
! 84, 90, 124, 180, 86, -1, 67, 109, 84, -1,
! 67, 1, 84, -1, 247, 245, 84, -1, 247, 1,
! 84, -1, 123, 67, 110, 84, -1, 36, 67, 117,
! 89, 220, 84, -1, 37, 67, 117, 89, 117, 89,
! 117, 84, -1, 38, 67, 220, 89, 220, 84, -1,
! 123, 68, 109, 91, -1, 123, 66, 107, -1, 123,
! 69, 107, -1, 123, 63, -1, 123, 62, -1, 126,
! -1, -1, 128, -1, 254, 255, 129, -1, 127, -1,
! 235, -1, 128, 127, -1, 127, 235, -1, 152, 131,
! 164, 85, -1, 153, 131, 165, 85, -1, 152, 85,
! -1, 153, 85, -1, 254, 255, 133, -1, -1, 171,
! -1, 150, 131, 164, 85, -1, 151, 131, 165, 85,
! -1, 150, 131, 188, -1, 151, 131, 191, -1, 157,
! 85, -1, 293, 133, -1, 8, -1, 134, 8, -1,
! 135, 8, -1, 134, 172, -1, 136, 8, -1, 137,
! 8, -1, 172, -1, 136, 172, -1, 159, -1, 138,
! 8, -1, 139, 8, -1, 138, 161, -1, 139, 161,
! -1, 134, 159, -1, 135, 159, -1, 160, -1, 138,
! 172, -1, 138, 162, -1, 139, 162, -1, 134, 160,
! -1, 135, 160, -1, 140, 8, -1, 141, 8, -1,
! 140, 161, -1, 141, 161, -1, 136, 159, -1, 137,
! 159, -1, 140, 172, -1, 140, 162, -1, 141, 162,
! -1, 136, 160, -1, 137, 160, -1, 177, -1, 142,
! 8, -1, 143, 8, -1, 134, 177, -1, 135, 177,
! -1, 142, 177, -1, 143, 177, -1, 142, 172, -1,
! 144, 8, -1, 145, 8, -1, 136, 177, -1, 137,
! 177, -1, 144, 177, -1, 145, 177, -1, 144, 172,
! -1, 146, 8, -1, 147, 8, -1, 146, 161, -1,
! 147, 161, -1, 142, 159, -1, 143, 159, -1, 138,
! 177, -1, 139, 177, -1, 146, 177, -1, 147, 177,
! -1, 146, 172, -1, 146, 162, -1, 147, 162, -1,
! 142, 160, -1, 143, 160, -1, 148, 8, -1, 149,
! 8, -1, 148, 161, -1, 149, 161, -1, 144, 159,
! -1, 145, 159, -1, 140, 177, -1, 141, 177, -1,
! 148, 177, -1, 149, 177, -1, 148, 172, -1, 148,
! 162, -1, 149, 162, -1, 144, 160, -1, 145, 160,
! -1, 138, -1, 139, -1, 140, -1, 141, -1, 146,
! -1, 147, -1, 148, -1, 149, -1, 134, -1, 135,
! -1, 136, -1, 137, -1, 142, -1, 143, -1, 144,
! -1, 145, -1, 138, -1, 139, -1, 146, -1, 147,
! -1, 134, -1, 135, -1, 142, -1, 143, -1, 138,
! -1, 139, -1, 140, -1, 141, -1, 134, -1, 135,
! -1, 136, -1, 137, -1, 138, -1, 139, -1, 140,
! -1, 141, -1, 134, -1, 135, -1, 136, -1, 137,
! -1, 134, -1, 135, -1, 136, -1, 137, -1, 138,
! -1, 139, -1, 140, -1, 141, -1, 142, -1, 143,
! -1, 144, -1, 145, -1, 146, -1, 147, -1, 148,
! -1, 149, -1, -1, 155, -1, 161, -1, 163, -1,
! 162, -1, 7, -1, 208, -1, 203, -1, 4, -1,
! 115, 67, 109, 84, -1, 115, 67, 220, 84, -1,
! 167, -1, 164, 89, 132, 167, -1, 169, -1, 165,
! 89, 132, 169, -1, -1, 28, 67, 10, 84, -1,
! -1, 194, 166, 171, 44, 168, 178, -1, 194, 166,
! 171, -1, -1, 199, 166, 171, 44, 170, 178, -1,
! 199, 166, 171, -1, -1, 172, -1, 173, -1, 172,
! 173, -1, 31, 67, 67, 174, 84, 84, -1, 175,
! -1, 174, 89, 175, -1, -1, 176, -1, 176, 67,
! 3, 84, -1, 176, 67, 3, 89, 111, 84, -1,
! 176, 67, 110, 84, -1, 107, -1, 177, -1, 7,
! -1, 8, -1, 6, -1, 5, -1, 117, -1, -1,
! 90, 179, 180, 86, -1, 1, -1, -1, 181, 209,
! -1, 182, -1, 181, 89, 182, -1, 186, 44, 184,
! -1, 187, 184, -1, -1, 107, 47, 183, 184, -1,
! 184, -1, -1, 90, 185, 180, 86, -1, 117, -1,
! 1, -1, 187, -1, 186, 187, -1, 66, 107, -1,
! 68, 117, 11, 117, 91, -1, 68, 117, 91, -1,
! -1, -1, 194, 189, 125, 190, 254, 255, 248, -1,
! -1, -1, 199, 192, 125, 193, 254, 255, 248, -1,
! 195, -1, 199, -1, 67, 171, 195, 84, -1, 195,
! 67, 288, -1, 195, 228, -1, 59, 158, 195, -1,
! 4, -1, 197, -1, 198, -1, 197, 67, 288, -1,
! 197, 228, -1, 4, -1, 198, 67, 288, -1, 198,
! 228, -1, 59, 158, 197, -1, 59, 158, 198, -1,
! 67, 171, 198, 84, -1, 199, 67, 288, -1, 67,
! 171, 199, 84, -1, 59, 158, 199, -1, 199, 228,
! -1, 3, -1, 14, -1, 14, 172, -1, 15, -1,
! 15, 172, -1, 13, -1, 13, 172, -1, -1, 200,
! 107, 90, 204, 211, 86, 171, -1, 200, 90, 211,
! 86, 171, -1, -1, 201, 107, 90, 205, 211, 86,
! 171, -1, 201, 90, 211, 86, 171, -1, -1, 202,
! 107, 90, 206, 218, 210, 86, 171, -1, -1, 202,
! 90, 207, 218, 210, 86, 171, -1, 200, 107, -1,
! 201, 107, -1, 202, 107, -1, -1, 89, -1, -1,
! 89, -1, 212, -1, 212, 213, -1, -1, 212, 213,
! 85, -1, 212, 85, -1, 154, 131, 214, -1, 154,
! 131, 254, 255, -1, 155, 131, 215, -1, 155, -1,
! 1, -1, 293, 213, -1, 216, -1, 214, 89, 132,
! 216, -1, 217, -1, 215, 89, 132, 217, -1, 254,
! 255, 194, 171, -1, 254, 255, 194, 47, 117, 171,
! -1, 254, 255, 47, 117, 171, -1, 254, 255, 199,
! 171, -1, 254, 255, 199, 47, 117, 171, -1, 254,
! 255, 47, 117, 171, -1, 219, -1, 218, 89, 219,
! -1, 1, -1, 107, -1, 107, 44, 117, -1, -1,
! 156, 221, 222, -1, -1, 224, -1, -1, 224, -1,
! 225, 172, -1, 226, -1, 225, -1, 227, -1, 59,
! 158, 225, -1, 59, 158, -1, 59, 158, 226, -1,
! 67, 171, 224, 84, -1, 227, 67, 278, -1, 227,
! 228, -1, 67, 278, -1, 228, -1, 68, 158, 109,
! 91, -1, 68, 158, 91, -1, 68, 158, 59, 91,
! -1, 68, 6, 158, 109, 91, -1, 68, 155, 6,
! 109, 91, -1, 230, -1, 231, -1, 232, -1, 233,
! -1, 258, -1, 230, 258, -1, 231, 258, -1, 232,
! 258, -1, 233, 258, -1, 130, -1, 230, 130, -1,
! 231, 130, -1, 233, 130, -1, 259, -1, 230, 259,
! -1, 231, 259, -1, 232, 259, -1, 233, 259, -1,
! 235, -1, 234, 235, -1, 230, -1, 231, -1, 232,
! -1, 233, -1, 1, 85, -1, -1, -1, -1, -1,
! -1, 241, -1, 242, -1, 241, 242, -1, 33, 292,
! 85, -1, 248, -1, 1, 248, -1, 90, -1, 86,
! -1, 236, 240, 246, 86, 237, -1, 229, -1, 1,
! -1, 67, 90, -1, 244, 245, -1, 250, 257, -1,
! 250, 1, -1, -1, 16, 251, 67, 109, 84, -1,
! -1, 19, 253, 257, 18, -1, -1, -1, 258, -1,
! 259, 256, -1, 238, 256, 239, -1, 254, 255, 270,
! -1, 254, 255, 271, -1, -1, 249, 17, 261, 257,
! -1, 249, -1, 249, 17, 1, -1, -1, -1, 18,
! 262, 67, 109, 84, 263, 257, -1, 252, 67, 109,
! 84, 85, -1, 252, 1, -1, -1, -1, -1, -1,
! 20, 264, 67, 269, 265, 273, 85, 266, 273, 84,
! 267, 257, -1, -1, 21, 67, 109, 84, 268, 257,
! -1, 273, 85, -1, 133, -1, 248, -1, 109, 85,
! -1, 238, 260, 239, -1, 24, 85, -1, 25, 85,
! -1, 26, 85, -1, 26, 109, 85, -1, 28, 272,
! 67, 109, 84, 85, -1, 28, 272, 67, 109, 47,
! 274, 84, 85, -1, 28, 272, 67, 109, 47, 274,
! 47, 274, 84, 85, -1, 28, 272, 67, 109, 47,
! 274, 47, 274, 47, 277, 84, 85, -1, 27, 107,
! 85, -1, 27, 59, 109, 85, -1, 85, -1, 22,
! 117, 47, -1, 22, 117, 11, 117, 47, -1, 23,
! 47, -1, 107, 254, 255, 47, 171, -1, -1, 8,
! -1, -1, 109, -1, -1, 275, -1, 276, -1, 275,
! 89, 276, -1, 10, 67, 109, 84, -1, 68, 107,
! 91, 10, 67, 109, 84, -1, 10, -1, 277, 89,
! 10, -1, -1, 171, 279, 280, -1, 283, 84, -1,
! -1, -1, 284, 85, 281, 171, 282, 280, -1, 1,
! 84, -1, -1, 11, -1, 284, -1, 284, 89, 11,
! -1, 286, -1, 284, 89, 285, -1, 150, 131, 196,
! 171, -1, 150, 131, 199, 171, -1, 150, 131, 223,
! -1, 151, 131, 199, 171, -1, 151, 131, 223, -1,
! 152, 287, 196, 171, -1, 152, 287, 199, 171, -1,
! 152, 287, 223, -1, 153, 287, 199, 171, -1, 153,
! 287, 223, -1, 131, -1, -1, 171, 289, 290, -1,
! 280, -1, 291, 84, -1, 3, -1, 291, 89, 3,
! -1, 107, -1, 292, 89, 107, -1, 32, -1
};
! /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
! static const unsigned short yyrline[] =
{
! 0, 288, 288, 293, 310, 309, 311, 311, 314, 319,
! 321, 322, 330, 334, 342, 344, 346, 348, 349, 350,
! 357, 362, 355, 368, 371, 376, 370, 382, 385, 390,
! 384, 396, 400, 402, 405, 407, 409, 414, 416, 418,
! 420, 424, 428, 431, 434, 437, 441, 443, 446, 449,
! 453, 455, 461, 464, 467, 470, 472, 476, 480, 484,
! 488, 490, 494, 496, 498, 500, 502, 504, 506, 508,
! 510, 512, 514, 516, 518, 521, 520, 528, 527, 535,
! 539, 534, 545, 544, 555, 562, 573, 580, 581, 583,
! 586, 585, 598, 603, 605, 621, 628, 630, 633, 643,
! 653, 655, 659, 665, 667, 672, 679, 687, 691, 696,
! 698, 699, 700, 704, 707, 709, 712, 717, 723, 732,
! 737, 740, 742, 744, 746, 748, 756, 760, 763, 768,
! 774, 778, 783, 787, 792, 796, 799, 802, 805, 808,
! 811, 816, 820, 823, 826, 829, 832, 837, 841, 844,
! 847, 850, 853, 858, 862, 865, 868, 871, 876, 880,
! 883, 886, 892, 898, 904, 912, 918, 922, 925, 931,
! 937, 943, 951, 957, 961, 964, 967, 970, 973, 976,
! 982, 988, 994, 1002, 1006, 1009, 1012, 1015, 1020, 1024,
! 1027, 1030, 1033, 1036, 1039, 1045, 1051, 1057, 1065, 1069,
! 1072, 1075, 1078, 1084, 1086, 1087, 1088, 1089, 1090, 1091,
! 1092, 1095, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1106,
! 1108, 1109, 1110, 1113, 1115, 1116, 1117, 1120, 1122, 1123,
! 1124, 1127, 1129, 1130, 1131, 1134, 1136, 1137, 1138, 1139,
! 1140, 1141, 1142, 1145, 1147, 1148, 1149, 1150, 1151, 1152,
! 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1165,
! 1168, 1174, 1176, 1179, 1183, 1186, 1189, 1193, 1198, 1200,
! 1206, 1208, 1211, 1213, 1216, 1219, 1225, 1223, 1232, 1241,
! 1239, 1248, 1254, 1257, 1261, 1264, 1268, 1273, 1276, 1280,
! 1283, 1285, 1287, 1289, 1295, 1297, 1298, 1299, 1302, 1304,
! 1309, 1312, 1311, 1315, 1320, 1324, 1327, 1329, 1333, 1337,
! 1341, 1340, 1346, 1351, 1349, 1354, 1356, 1359, 1361, 1364,
! 1367, 1371, 1377, 1390, 1375, 1403, 1416, 1401, 1429, 1431,
! 1436, 1439, 1442, 1444, 1446, 1450, 1452, 1455, 1459, 1461,
! 1464, 1468, 1470, 1472, 1474, 1480, 1484, 1486, 1488, 1490,
! 1493, 1496, 1500, 1503, 1507, 1510, 1518, 1516, 1523, 1528,
! 1527, 1531, 1536, 1535, 1541, 1540, 1547, 1550, 1552, 1560,
! 1562, 1565, 1567, 1572, 1575, 1580, 1582, 1584, 1589, 1593,
! 1603, 1606, 1611, 1613, 1618, 1620, 1624, 1626, 1630, 1634,
! 1638, 1643, 1647, 1651, 1658, 1660, 1665, 1670, 1673, 1679,
! 1677, 1685, 1688, 1691, 1696, 1700, 1706, 1708, 1711, 1713,
! 1717, 1720, 1724, 1727, 1729, 1731, 1733, 1739, 1742, 1744,
! 1746, 1749, 1755, 1757, 1758, 1762, 1765, 1767, 1768, 1769,
! 1770, 1773, 1775, 1778, 1779, 1782, 1784, 1785, 1786, 1787,
! 1790, 1792, 1795, 1797, 1798, 1799, 1802, 1805, 1812, 1817,
! 1831, 1845, 1847, 1852, 1854, 1857, 1870, 1873, 1876, 1880,
! 1882, 1889, 1891, 1894, 1912, 1919, 1923, 1929, 1926, 1941,
! 1939, 1957, 1963, 1969, 1971, 1975, 1981, 1995, 2006, 2004,
! 2013, 2023, 2027, 2030, 2026, 2036, 2039, 2042, 2046, 2049,
! 2053, 2041, 2057, 2056, 2063, 2066, 2071, 2074, 2077, 2081,
! 2084, 2087, 2090, 2093, 2097, 2101, 2106, 2110, 2122, 2128,
! 2134, 2137, 2140, 2143, 2158, 2162, 2166, 2169, 2173, 2175,
! 2178, 2180, 2184, 2187, 2193, 2196, 2203, 2201, 2212, 2215,
! 2223, 2214, 2227, 2232, 2234, 2244, 2248, 2252, 2255, 2260,
! 2266, 2271, 2274, 2280, 2286, 2292, 2297, 2300, 2306, 2311,
! 2320, 2318, 2329, 2331, 2348, 2351, 2356, 2359, 2363
};
#endif
! #if YYDEBUG || YYERROR_VERBOSE
! /* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
! First, the terminals, then, starting at YYNTOKENS, nonterminals. */
static const char *const yytname[] =
{
! "$end", "error", "$undefined", "IDENTIFIER", "TYPENAME", "SCSPEC",
! "STATIC", "TYPESPEC", "TYPE_QUAL", "CONSTANT", "STRING", "ELLIPSIS",
! "SIZEOF", "ENUM", "STRUCT", "UNION", "IF", "ELSE", "WHILE", "DO", "FOR",
! "SWITCH", "CASE", "DEFAULT", "BREAK", "CONTINUE", "RETURN", "GOTO",
! "ASM_KEYWORD", "TYPEOF", "ALIGNOF", "ATTRIBUTE", "EXTENSION", "LABEL",
! "REALPART", "IMAGPART", "VA_ARG", "CHOOSE_EXPR", "TYPES_COMPATIBLE_P",
! "PTR_VALUE", "PTR_BASE", "PTR_EXTENT", "STRING_FUNC_NAME",
! "VAR_FUNC_NAME", "'='", "ASSIGN", "'?'", "':'", "OROR", "ANDAND", "'|'",
! "'^'", "'&'", "EQCOMPARE", "ARITHCOMPARE", "RSHIFT", "LSHIFT", "'+'",
! "'-'", "'*'", "'/'", "'%'", "MINUSMINUS", "PLUSPLUS", "UNARY",
! "HYPERUNARY", "'.'", "'('", "'['", "POINTSAT", "INTERFACE",
! "IMPLEMENTATION", "END", "SELECTOR", "DEFS", "ENCODE", "CLASSNAME",
! "PUBLIC", "PRIVATE", "PROTECTED", "PROTOCOL", "OBJECTNAME", "CLASS",
! "ALIAS", "')'", "';'", "'}'", "'~'", "'!'", "','", "'{'", "']'",
! "$accept", "program", "extdefs", "@1", "@2", "extdef", "extdef_1",
! "datadef", "fndef", "@3", "@4", "@5", "@6", "@7", "@8", "identifier",
! "unop", "expr", "exprlist", "nonnull_exprlist", "unary_expr", "sizeof",
! "alignof", "typeof", "cast_expr", "expr_no_commas", "@9", "@10", "@11",
! "@12", "@13", "primary", "@14", "old_style_parm_decls",
! "old_style_parm_decls_1", "lineno_datadecl", "datadecls", "datadecl",
! "lineno_decl", "setspecs", "maybe_resetattrs", "decl",
! "declspecs_nosc_nots_nosa_noea", "declspecs_nosc_nots_nosa_ea",
"declspecs_nosc_nots_sa_noea", "declspecs_nosc_nots_sa_ea",
"declspecs_nosc_ts_nosa_noea", "declspecs_nosc_ts_nosa_ea",
"declspecs_nosc_ts_sa_noea", "declspecs_nosc_ts_sa_ea",
*************** static const char *const yytname[] =
*** 654,1811 ****
};
#endif
! /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
! static const short yyr1[] =
{
! 0, 92, 92, 94, 93, 95, 93, 96, 97, 97,
! 97, 97, 98, 98, 98, 98, 98, 98, 98, 100,
! 101, 99, 99, 102, 103, 99, 99, 104, 105, 99,
! 99, 106, 106, 107, 107, 107, 107, 107, 107, 107,
! 108, 109, 109, 110, 110, 111, 111, 111, 111, 111,
! 111, 111, 111, 111, 111, 111, 112, 113, 114, 115,
! 115, 116, 116, 116, 116, 116, 116, 116, 116, 116,
! 116, 116, 116, 116, 117, 116, 118, 116, 119, 120,
! 116, 121, 116, 116, 116, 122, 122, 122, 122, 123,
! 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
! 122, 122, 122, 122, 124, 125, 125, 126, 127, 127,
! 127, 127, 128, 128, 128, 128, 129, 130, 131, 132,
! 132, 132, 132, 132, 132, 133, 133, 133, 134, 135,
! 135, 136, 136, 137, 137, 137, 137, 137, 137, 137,
! 138, 138, 138, 138, 138, 138, 139, 139, 139, 139,
! 139, 139, 140, 140, 140, 140, 140, 141, 141, 141,
! 141, 141, 141, 141, 142, 143, 143, 143, 143, 143,
! 143, 144, 145, 145, 145, 145, 145, 145, 145, 145,
! 145, 145, 146, 146, 146, 146, 146, 147, 147, 147,
! 147, 147, 147, 147, 147, 147, 147, 148, 148, 148,
! 148, 148, 149, 149, 149, 149, 149, 149, 149, 149,
! 150, 150, 150, 150, 150, 150, 150, 150, 151, 151,
! 151, 151, 152, 152, 152, 152, 153, 153, 153, 153,
! 154, 154, 154, 154, 155, 155, 155, 155, 155, 155,
! 155, 155, 156, 156, 156, 156, 156, 156, 156, 156,
! 156, 156, 156, 156, 156, 156, 156, 156, 157, 157,
! 158, 158, 159, 160, 160, 161, 162, 162, 162, 163,
! 163, 164, 164, 165, 165, 167, 166, 166, 169, 168,
! 168, 170, 170, 171, 171, 172, 173, 173, 174, 174,
! 174, 174, 174, 175, 175, 175, 175, 176, 176, 177,
! 178, 177, 177, 179, 179, 180, 180, 181, 181, 182,
! 181, 181, 184, 183, 183, 183, 185, 185, 186, 186,
! 186, 188, 189, 187, 191, 192, 190, 193, 193, 194,
! 194, 194, 194, 194, 195, 195, 196, 196, 196, 197,
! 197, 197, 197, 197, 198, 198, 198, 198, 198, 199,
! 199, 200, 200, 201, 201, 203, 202, 202, 204, 202,
! 202, 205, 202, 206, 202, 207, 207, 207, 208, 208,
! 209, 209, 210, 210, 211, 211, 211, 212, 212, 212,
! 212, 212, 212, 213, 213, 214, 214, 215, 215, 215,
! 216, 216, 216, 217, 217, 217, 218, 218, 220, 219,
! 221, 221, 222, 222, 222, 223, 223, 224, 224, 225,
! 225, 226, 226, 226, 226, 226, 227, 227, 227, 227,
! 227, 228, 228, 228, 228, 229, 229, 229, 229, 229,
! 230, 230, 230, 230, 231, 231, 231, 231, 231, 232,
! 232, 233, 233, 233, 233, 234, 235, 236, 237, 238,
! 239, 239, 240, 240, 241, 242, 242, 243, 244, 244,
! 245, 245, 246, 247, 248, 248, 250, 249, 252, 251,
! 253, 254, 255, 255, 256, 257, 258, 260, 259, 259,
! 259, 261, 262, 259, 259, 259, 263, 264, 265, 266,
! 259, 267, 259, 268, 268, 269, 269, 269, 269, 269,
! 269, 269, 269, 269, 269, 269, 269, 269, 269, 270,
! 270, 270, 270, 271, 271, 272, 272, 273, 273, 274,
! 274, 275, 275, 276, 276, 278, 277, 279, 280, 281,
! 279, 279, 282, 282, 282, 282, 283, 283, 284, 284,
! 284, 284, 284, 285, 285, 285, 285, 285, 286, 288,
! 287, 289, 289, 290, 290, 291, 291, 292
};
! /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
! static const short yyr2[] =
{
! 0, 0, 1, 0, 2, 0, 3, 1, 1, 1,
! 5, 2, 3, 4, 4, 2, 2, 2, 1, 0,
! 0, 9, 4, 0, 0, 9, 4, 0, 0, 8,
! 3, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 1, 0, 1, 1, 3, 1, 2, 2, 2, 2,
! 2, 4, 2, 4, 2, 2, 1, 1, 1, 1,
! 4, 1, 3, 3, 3, 3, 3, 3, 3, 3,
! 3, 3, 3, 3, 0, 4, 0, 4, 0, 0,
! 7, 0, 5, 3, 3, 1, 1, 1, 1, 0,
! 7, 3, 3, 3, 3, 4, 6, 8, 6, 4,
! 3, 3, 2, 2, 1, 0, 1, 3, 1, 1,
! 2, 2, 4, 4, 2, 2, 3, 0, 1, 4,
! 4, 3, 3, 2, 2, 1, 2, 2, 2, 2,
! 2, 1, 2, 1, 2, 2, 2, 2, 2, 2,
! 1, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 2, 2, 2, 2, 2, 2, 2, 1, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 2, 2, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 1, 1, 1, 1, 1, 1, 1, 1, 0, 1,
! 1, 1, 1, 1, 1, 1, 1, 4, 4, 1,
! 4, 1, 4, 0, 4, 0, 6, 3, 0, 6,
! 3, 0, 1, 1, 2, 6, 1, 3, 0, 1,
! 4, 6, 4, 1, 1, 1, 1, 1, 1, 1,
! 0, 4, 1, 0, 2, 1, 3, 3, 2, 0,
! 4, 1, 0, 4, 1, 1, 1, 2, 2, 5,
! 3, 0, 0, 7, 0, 0, 7, 1, 1, 4,
! 3, 2, 3, 1, 1, 1, 3, 2, 1, 3,
! 2, 3, 3, 4, 3, 4, 3, 2, 1, 1,
! 2, 1, 2, 1, 2, 0, 7, 5, 0, 7,
! 5, 0, 8, 0, 7, 2, 2, 2, 0, 1,
! 0, 1, 1, 2, 0, 3, 2, 3, 4, 3,
! 1, 1, 2, 1, 4, 1, 4, 4, 6, 5,
! 4, 6, 5, 1, 3, 1, 1, 3, 0, 3,
! 0, 1, 0, 1, 2, 1, 1, 1, 3, 2,
! 3, 4, 3, 2, 2, 1, 4, 3, 4, 5,
! 5, 1, 1, 1, 1, 1, 2, 2, 2, 2,
! 1, 2, 2, 2, 1, 2, 2, 2, 2, 1,
! 2, 1, 1, 1, 1, 2, 0, 0, 0, 0,
! 0, 1, 1, 2, 3, 1, 2, 1, 1, 5,
! 1, 1, 2, 2, 2, 2, 0, 5, 0, 4,
! 0, 0, 1, 2, 3, 3, 3, 0, 4, 1,
! 3, 0, 0, 7, 5, 2, 0, 0, 0, 0,
! 12, 0, 6, 2, 1, 1, 2, 3, 2, 2,
! 2, 3, 6, 8, 10, 12, 3, 4, 1, 3,
! 5, 2, 5, 0, 1, 0, 1, 0, 1, 1,
! 3, 4, 7, 1, 3, 0, 3, 2, 0, 0,
! 6, 2, 0, 1, 1, 3, 1, 3, 4, 4,
! 3, 4, 3, 4, 4, 3, 4, 3, 1, 0,
! 3, 1, 2, 1, 3, 1, 3, 1
};
! /* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE
! doesn't specify something else to do. Zero means the default is an
! error. */
! static const short yydefact[] =
{
! 3, 5, 0, 0, 0, 266, 298, 297, 263, 125,
! 353, 349, 351, 0, 58, 0, 557, 18, 4, 7,
! 9, 8, 0, 0, 210, 211, 212, 213, 202, 203,
! 204, 205, 214, 215, 216, 217, 206, 207, 208, 209,
! 117, 117, 0, 133, 140, 260, 262, 261, 131, 283,
! 157, 0, 0, 0, 265, 264, 0, 6, 16, 17,
! 354, 350, 352, 0, 0, 0, 348, 258, 281, 0,
! 271, 0, 126, 138, 144, 128, 160, 127, 139, 145,
! 161, 129, 150, 155, 132, 167, 130, 151, 156, 168,
! 134, 136, 142, 141, 178, 135, 137, 143, 179, 146,
! 148, 153, 152, 193, 147, 149, 154, 194, 158, 176,
! 185, 164, 162, 159, 177, 186, 163, 165, 191, 200,
! 171, 169, 166, 192, 201, 170, 172, 174, 183, 182,
! 180, 173, 175, 184, 181, 187, 189, 198, 197, 195,
! 188, 190, 199, 196, 0, 0, 15, 284, 31, 32,
! 374, 365, 374, 366, 363, 367, 11, 85, 86, 87,
! 56, 57, 0, 0, 0, 0, 0, 88, 0, 33,
! 35, 34, 0, 36, 37, 0, 38, 39, 0, 0,
! 40, 59, 0, 0, 61, 43, 45, 0, 0, 288,
! 0, 238, 239, 240, 241, 234, 235, 236, 237, 398,
! 0, 230, 231, 232, 233, 259, 0, 0, 282, 12,
! 281, 30, 0, 281, 258, 0, 281, 347, 333, 258,
! 281, 0, 269, 0, 327, 328, 0, 0, 0, 0,
! 355, 0, 358, 0, 361, 54, 55, 0, 0, 0,
! 49, 46, 0, 462, 0, 0, 48, 0, 0, 0,
! 50, 0, 52, 0, 0, 78, 76, 74, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
! 102, 103, 0, 0, 41, 0, 0, 458, 450, 0,
! 47, 295, 296, 293, 0, 286, 289, 294, 267, 400,
! 268, 346, 0, 0, 118, 0, 549, 344, 258, 259,
! 0, 0, 28, 104, 0, 470, 109, 471, 280, 0,
! 0, 14, 281, 22, 0, 281, 281, 331, 13, 26,
! 0, 281, 381, 376, 230, 231, 232, 233, 226, 227,
! 228, 229, 117, 117, 373, 0, 374, 281, 374, 395,
! 396, 370, 393, 0, 0, 0, 0, 92, 91, 0,
! 10, 44, 0, 0, 84, 83, 0, 0, 0, 0,
! 72, 73, 71, 70, 69, 67, 68, 62, 63, 64,
! 65, 66, 101, 100, 0, 42, 0, 94, 0, 0,
! 451, 452, 93, 0, 288, 41, 258, 281, 399, 401,
! 406, 405, 407, 415, 345, 272, 273, 0, 0, 0,
! 0, 0, 417, 0, 445, 470, 111, 110, 0, 278,
! 332, 0, 0, 20, 277, 330, 24, 357, 470, 470,
! 375, 382, 0, 360, 0, 0, 371, 0, 370, 0,
! 0, 0, 89, 60, 51, 53, 0, 0, 77, 75,
! 95, 99, 555, 0, 461, 430, 460, 470, 470, 470,
! 470, 0, 439, 0, 471, 425, 434, 453, 285, 287,
! 85, 0, 409, 525, 414, 281, 413, 274, 0, 553,
! 533, 222, 223, 218, 219, 224, 225, 220, 221, 117,
! 117, 551, 0, 534, 536, 550, 0, 0, 0, 418,
! 416, 471, 107, 117, 117, 0, 329, 270, 273, 470,
! 275, 470, 377, 383, 471, 379, 385, 471, 281, 281,
! 397, 394, 281, 0, 0, 0, 0, 0, 79, 82,
! 454, 0, 431, 426, 435, 432, 427, 436, 471, 428,
! 437, 433, 429, 438, 440, 447, 448, 290, 0, 292,
! 408, 410, 0, 0, 525, 412, 531, 548, 402, 402,
! 527, 528, 0, 552, 0, 419, 420, 0, 114, 0,
! 115, 0, 302, 300, 299, 279, 471, 0, 471, 281,
! 378, 281, 0, 356, 359, 364, 281, 96, 0, 98,
! 315, 85, 0, 0, 312, 0, 314, 0, 368, 305,
! 311, 0, 0, 0, 556, 448, 459, 266, 0, 0,
! 0, 0, 0, 0, 513, 508, 457, 470, 0, 116,
! 117, 117, 0, 0, 446, 495, 475, 476, 0, 0,
! 411, 526, 338, 258, 281, 281, 334, 335, 281, 545,
! 403, 406, 258, 281, 281, 547, 281, 535, 210, 211,
! 212, 213, 202, 203, 204, 205, 214, 215, 216, 217,
! 206, 207, 208, 209, 117, 117, 537, 554, 0, 29,
! 455, 0, 0, 0, 0, 276, 0, 470, 0, 281,
! 470, 0, 281, 362, 0, 318, 0, 0, 309, 90,
! 0, 304, 0, 317, 308, 80, 0, 511, 498, 499,
! 500, 0, 0, 0, 514, 0, 471, 496, 0, 0,
! 123, 466, 481, 468, 486, 0, 479, 0, 0, 449,
! 463, 124, 291, 409, 525, 543, 281, 337, 281, 340,
! 544, 404, 409, 525, 546, 529, 402, 402, 456, 112,
! 113, 0, 21, 25, 384, 471, 281, 0, 387, 386,
! 281, 0, 390, 97, 0, 320, 0, 0, 306, 307,
! 0, 509, 501, 0, 506, 0, 0, 0, 121, 321,
! 0, 122, 324, 0, 0, 448, 0, 0, 0, 465,
! 470, 464, 485, 0, 497, 341, 342, 0, 336, 339,
! 0, 281, 281, 540, 281, 542, 301, 0, 389, 281,
! 392, 281, 0, 313, 310, 0, 507, 0, 281, 119,
! 0, 120, 0, 0, 0, 0, 515, 0, 480, 448,
! 449, 472, 470, 0, 343, 530, 538, 539, 541, 388,
! 391, 319, 510, 517, 0, 512, 322, 325, 0, 0,
! 469, 516, 494, 487, 0, 491, 478, 474, 473, 0,
! 0, 0, 0, 518, 519, 502, 470, 470, 467, 482,
! 515, 493, 448, 484, 0, 0, 517, 0, 0, 471,
! 471, 448, 0, 492, 0, 0, 0, 503, 520, 0,
! 0, 483, 488, 521, 0, 0, 0, 323, 326, 515,
! 0, 523, 0, 504, 0, 0, 0, 0, 489, 522,
! 505, 524, 448, 490, 0, 0, 0
};
static const short yydefgoto[] =
{
! 894, 1, 2, 3, 18, 19, 20, 21, 314, 499,
! 320, 501, 215, 405, 585, 178, 244, 374, 180, 181,
! 182, 183, 22, 184, 185, 359, 358, 356, 593, 357,
! 186, 517, 302, 303, 304, 305, 492, 445, 23, 293,
! 609, 191, 192, 193, 194, 195, 196, 197, 198, 32,
! 33, 34, 35, 36, 37, 38, 39, 40, 41, 479,
! 480, 332, 205, 199, 42, 206, 43, 44, 45, 46,
! 47, 221, 69, 216, 222, 567, 70, 495, 294, 208,
! 49, 284, 285, 286, 50, 565, 663, 587, 588, 589,
! 747, 590, 677, 591, 592, 758, 800, 846, 761, 802,
! 847, 498, 224, 625, 626, 627, 225, 51, 52, 53,
! 54, 336, 338, 343, 233, 55, 681, 427, 228, 229,
! 334, 502, 505, 503, 506, 341, 342, 200, 289, 388,
! 629, 630, 390, 391, 392, 217, 446, 447, 448, 449,
! 450, 451, 306, 278, 596, 770, 774, 379, 380, 381,
! 659, 614, 279, 453, 187, 660, 706, 707, 763, 708,
! 765, 307, 408, 810, 771, 811, 812, 709, 809, 764,
! 861, 766, 850, 879, 892, 852, 833, 616, 617, 695,
! 834, 842, 843, 844, 882, 464, 543, 481, 636, 780,
! 482, 483, 656, 484, 548, 297, 398, 485, 486, 443,
! 188
};
static const short yypact[] =
{
! 92, 118, 2854, 2854, 195,-32768,-32768,-32768,-32768,-32768,
! 100, 100, 100, 72,-32768, 104,-32768,-32768,-32768,-32768,
! -32768,-32768, 156, 143, 982, 1751, 1012, 1839, 510, 304,
! 1266, 1162, 1262, 2106, 1556, 2343, 1293, 1755, 1448, 1843,
! -32768,-32768, 64,-32768,-32768,-32768,-32768,-32768, 100,-32768,
! -32768, 119, 130, 141,-32768,-32768, 2854,-32768,-32768,-32768,
! 100, 100, 100, 2644, 162, 2562,-32768, 144, 100, 25,
! -32768, 880,-32768,-32768,-32768, 100,-32768,-32768,-32768,-32768,
! -32768,-32768,-32768,-32768, 100,-32768,-32768,-32768,-32768,-32768,
! -32768,-32768,-32768, 100,-32768,-32768,-32768,-32768,-32768,-32768,
! -32768,-32768, 100,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
! -32768, 100,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
! 100,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 100,
! -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 100,-32768,
! -32768,-32768,-32768,-32768, 319, 143,-32768,-32768,-32768,-32768,
! -32768, 80,-32768, 155,-32768, 164,-32768,-32768,-32768,-32768,
! -32768,-32768, 2644, 2644, 204, 246, 257,-32768, 557,-32768,
! -32768,-32768, 2644,-32768,-32768, 1353,-32768,-32768, 2644, 254,
! 259,-32768, 2706, 2747,-32768, 3142, 467, 1588, 2644, 1148,
! 267, 1501, 1114, 1635, 2044, 1081, 446, 1126, 675,-32768,
! 289, 220, 376, 282, 398,-32768, 143, 143, 100,-32768,
! 100,-32768, 341, 100, 226, 491, 100,-32768,-32768, 144,
! 100, 128,-32768, 1041, 497, 545, 297, 946, 326, 1178,
! -32768, 345,-32768, 499,-32768,-32768,-32768, 2644, 2644, 2419,
! -32768,-32768, 357,-32768, 360, 367,-32768, 391, 2644, 1353,
! -32768, 1353,-32768, 2644, 2644, 411,-32768,-32768, 2644, 2644,
! 2644, 2644, 2644, 2644, 2644, 2644, 2644, 2644, 2644, 2644,
! -32768,-32768, 557, 557, 2644, 2644, 417,-32768, 476, 427,
! -32768,-32768,-32768,-32768, 324,-32768, 451,-32768,-32768, 380,
! -32768, 545, 292, 143,-32768, 511,-32768,-32768, 144, 521,
! 2192, 444,-32768,-32768, 767, 86,-32768,-32768, 493, 319,
! 319,-32768, 100,-32768, 491, 100, 100,-32768,-32768,-32768,
! 491, 100,-32768,-32768, 1501, 1114, 1635, 2044, 1081, 446,
! 1126, 675,-32768, 533, 463, 1393,-32768, 100,-32768,-32768,
! 506, 474,-32768, 499, 2932, 2958, 480,-32768,-32768, 2434,
! -32768, 3142, 488, 490, 3142, 3142, 2644, 536, 2644, 2644,
! 2668, 2871, 2525, 924, 1145, 547, 547, 531, 531,-32768,
! -32768,-32768,-32768,-32768, 509, 259, 508,-32768, 557, 1686,
! 476,-32768,-32768, 513, 1148, 2788, 144, 100,-32768,-32768,
! -32768,-32768, 564,-32768,-32768,-32768, 303, 527, 1210, 2644,
! 2644, 2233,-32768, 529,-32768,-32768,-32768,-32768, 723,-32768,
! 497, 296, 319,-32768, 583,-32768,-32768,-32768,-32768,-32768,
! -32768,-32768, 544,-32768, 548, 2644, 557, 554, 474, 2419,
! 2644, 2419,-32768,-32768, 553, 553, 598, 2644, 3171, 2155,
! -32768,-32768,-32768, 358, 444,-32768,-32768, 65, 73, 95,
! 96, 646,-32768, 563,-32768,-32768,-32768,-32768,-32768,-32768,
! 336, 567, 380, 380,-32768, 100,-32768,-32768, 571,-32768,
! -32768, 1536, 2170, 1101, 1045, 2904, 2512, 1521, 1814,-32768,
! -32768,-32768, 575, 393,-32768,-32768, 337, 570, 572,-32768,
! -32768,-32768,-32768, 585, 590, 2066,-32768,-32768, 649,-32768,
! -32768,-32768, 596,-32768,-32768, 602,-32768,-32768, 100, 100,
! 3142,-32768, 100, 593, 603, 2978, 618, 1928,-32768, 3158,
! -32768, 557,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
! -32768,-32768,-32768,-32768,-32768,-32768, 2303,-32768, 2644,-32768,
! -32768,-32768, 619, 387,-32768,-32768,-32768,-32768, 415, 147,
! -32768,-32768, 539,-32768, 729,-32768,-32768, 90,-32768, 319,
! -32768, 143,-32768,-32768, 3142,-32768,-32768, 2066,-32768, 100,
! 236, 100, 298,-32768,-32768,-32768, 100,-32768, 2644,-32768,
! -32768, 688, 557, 2644,-32768, 701, 3142, 664, 662,-32768,
! -32768, 239, 1435, 2644,-32768, 2372,-32768, 708, 2644, 709,
! 672, 673, 2603, 133, 752,-32768,-32768,-32768, 676,-32768,
! -32768,-32768, 679, 726, 683,-32768,-32768,-32768, 2500, 373,
! -32768,-32768,-32768, 144, 100, 100, 589, 604, 328,-32768,
! -32768, 100, 144, 100, 328,-32768, 100,-32768, 1536, 2170,
! 3095, 3126, 1101, 1045, 1902, 2144, 2904, 2512, 3107, 3138,
! 1521, 1814, 1968, 2474,-32768,-32768,-32768,-32768, 680,-32768,
! -32768, 400, 405, 1928, 90,-32768, 90,-32768, 2644, 247,
! -32768, 2644, 153,-32768, 3000,-32768, 2843, 1928,-32768,-32768,
! 1997,-32768, 2130,-32768,-32768, 3158, 2896,-32768,-32768,-32768,
! -32768, 691, 2644, 694,-32768, 697,-32768,-32768, 319, 143,
! -32768,-32768,-32768,-32768,-32768, 715, 768, 1774, 125,-32768,
! -32768,-32768,-32768, 415, 200,-32768, 100,-32768, 100,-32768,
! -32768, 100, 147, 147,-32768,-32768, 415, 147,-32768,-32768,
! -32768, 698,-32768,-32768,-32768,-32768, 3037, 2644,-32768,-32768,
! 3037, 2644,-32768,-32768, 2644,-32768, 702, 2130,-32768,-32768,
! 2644,-32768,-32768, 705,-32768, 2644, 745, 423,-32768, 379,
! 437,-32768, 258, 727, 730,-32768, 732, 2644, 1862,-32768,
! -32768,-32768,-32768, 2644,-32768, 589, 604, 354,-32768,-32768,
! 387, 100, 328,-32768, 328,-32768,-32768, 236,-32768, 3037,
! -32768, 3037, 2914,-32768,-32768, 3124,-32768, 77, 100,-32768,
! 491,-32768, 491, 2644, 2644, 776, 2500, 713,-32768,-32768,
! -32768,-32768,-32768, 717,-32768,-32768,-32768,-32768,-32768,-32768,
! -32768,-32768,-32768, 58, 719,-32768,-32768,-32768, 721, 725,
! -32768,-32768,-32768,-32768, 728,-32768,-32768,-32768,-32768, 733,
! 743, 557, 81, 731,-32768,-32768,-32768,-32768,-32768,-32768,
! 2644,-32768,-32768,-32768, 2644, 724, 58, 736, 58,-32768,
! -32768,-32768, 738,-32768, 742, 804, 126,-32768,-32768, 680,
! 680,-32768,-32768,-32768, 760, 820, 746,-32768,-32768, 2644,
! 2644,-32768, 381,-32768, 750, 755, 756, 830,-32768,-32768,
! -32768,-32768,-32768,-32768, 842, 847,-32768
};
static const short yypgoto[] =
{
! -32768,-32768,-32768,-32768, 113,-32768,-32768,-32768,-32768,-32768,
! -32768,-32768,-32768,-32768, 102,-32768, -63, 464, -256, 443,
! -32768,-32768,-32768, -105, 990,-32768,-32768,-32768,-32768,-32768,
! -32768,-32768, -309,-32768, 546,-32768,-32768, 129, 123, -271,
! -557, 42, 44, 46, 48, 6, 19, 21, 23, -381,
! -369, 301, 306, -365, -314, 317, 320, -532, -451, 447,
! 465,-32768, -121,-32768, -501, -160, 674, 811, 868, 903,
! -32768, -494, -132, -222, 459,-32768, 581,-32768, 294, 4,
! 28,-32768, 494,-32768, 687, 308,-32768, -348,-32768, 197,
! -32768, -522,-32768,-32768, 288,-32768,-32768,-32768,-32768,-32768,
! -32768, -134, 384, 154, 169, -18, 40,-32768,-32768,-32768,
! -32768,-32768,-32768,-32768,-32768,-32768,-32768, 455, -72,-32768,
! 555,-32768,-32768, 222, 221, 549, 475, -144,-32768,-32768,
! -485, -277, -406, -425,-32768, 397,-32768,-32768,-32768,-32768,
! -32768,-32768, -232,-32768,-32768, -437, 93,-32768,-32768, 520,
! -197,-32768, 300,-32768,-32768, -517,-32768,-32768,-32768,-32768,
! -32768, 414, -372, 98, -684, -259, -80,-32768,-32768,-32768,
! -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
! -652, 56,-32768, 59,-32768, 456,-32768, -488,-32768,-32768,
! -32768,-32768,-32768,-32768, 422, -313,-32768,-32768,-32768,-32768,
! 50
};
!
! #define YYLAST 3232
!
!
static const short yytable[] =
{
! 179, 315, 190, 415, 610, 413, 48, 48, 28, 28,
! 223, 416, 389, 226, 60, 61, 62, 475, 375, 615,
! 654, 29, 29, 30, 30, 31, 31, 475, 75, 476,
! 84, 245, 93, 477, 102, 612, 111, 541, 120, 476,
! 129, 412, 138, 477, 24, 24, 25, 25, 26, 26,
! 27, 27, 56, 56, 300, 621, 540, 235, 236, 309,
! 48, 711, 28, 71, 635, 661, -441, 241, 840, 48,
! 684, 48, 406, 246, -442, 29, 147, 30, 615, 31,
! 231, 805, 536, 280, 478, 611, 610, -106, 147, 147,
! 147, 658, -1, 299, 478, 346, -443, -444, 24, 613,
! 25, 655, 26, 147, 27, 352, 56, 353, 333, 201,
! 209, 202, 147, 203, 210, 204, 57, 612, -2, 557,
! 455, 147, 148, 149, 823, 836, 772, 841, 856, 375,
! 147, 15, 570, 148, 149, 572, 148, 149, 399, 147,
! 63, 728, 631, 631, 148, 149, 66, 452, 147, 146,
! 66, -421, 9, 151, 153, 155, 595, 147, 613, -422,
! 749, 824, 475, 144, 145, 857, 147, 611, 863, 156,
! 230, 646, 64, 875, 476, 15, -106, 871, 477, 48,
! 606, -423, -424, 647, 15, 227, 542, 650, 523, 526,
! 529, 532, 692, 773, 664, 75, 666, 84, 862, 93,
! 741, 102, 67, 66, 757, 75, 632, 84, 893, 150,
! 876, 68, 376, 311, 333, 633, 214, 312, 48, 534,
! 152, 213, 214, 48, 65, 794, 462, 884, 72, 478,
! 189, 154, 298, 48, 9, 328, 147, 403, 651, 66,
! 218, 783, 785, 48, 433, 232, 291, 292, 329, 832,
! 330, 15, 331, 48, 234, 48, 201, 15, 202, 623,
! 203, 201, 204, 202, 422, 203, 424, 204, 624, 214,
! 240, 324, 237, 325, 610, 326, 315, 327, 15, 335,
! 58, 59, 619, 668, 682, 514, 212, 516, 541, -273,
! 81, 283, 815, 436, 737, 219, 241, 541, 667, 456,
! 670, 66, 48, -273, 220, 612, 582, 540, 583, 6,
! 7, 8, 95, 15, 238, 731, 540, 10, 11, 12,
! 631, 631, 66, 218, 756, 239, 213, 214, 75, 746,
! 84, 212, 93, 396, 102, 340, 487, 488, 247, 48,
! 201, 328, 202, -273, 203, 671, 204, -273, 248, 291,
! 292, 288, 877, 878, 329, 611, 330, 67, 331, 15,
! 213, 214, 207, 787, 316, 214, 68, 524, 527, 530,
! 533, 213, 214, 290, 372, 373, 394, 324, 219, 325,
! 496, 326, 318, 327, 77, 335, 210, 220, 468, -247,
! 48, 5, 6, 7, 8, 9, 213, 214, 470, 475,
! 10, 11, 12, 778, 473, 779, 86, 212, 383, 295,
! -273, 476, 321, 384, 473, 477, 14, 474, 66, 622,
! 537, 553, 718, 214, -273, 538, 554, 474, 201, 662,
! 202, 337, 203, 48, 204, 48, 669, 542, 814, 386,
! 471, 347, 472, 520, 348, 340, 542, 521, 387, 214,
! 471, 349, 472, 8, 95, 418, 419, 712, -81, 10,
! 11, 12, 248, 713, -273, 886, 478, 732, -273, 733,
! 887, -532, 722, 608, 623, 75, 350, 93, 551, 111,
! 442, 129, 552, 624, 214, 729, 283, 869, 870, 312,
! 730, 826, 301, 827, 210, -470, -470, -470, -470, -470,
! 339, 377, 148, 149, -470, -470, -470, 296, 799, 378,
! 308, 382, 312, 280, 310, 6, 7, 8, 90, 385,
! -470, 397, 801, 10, 11, 12, 210, 400, 340, 404,
! 270, 271, 608, 272, 273, 274, 275, 315, 409, 691,
! 48, 15, 28, 5, 6, 7, 8, 9, 420, 473,
! 637, 425, 10, 11, 12, 29, 48, 30, 642, 31,
! 148, 149, 474, 426, 759, 316, 214, 760, 14, 431,
! 15, 643, 434, 644, 435, 645, 522, 525, 24, 531,
! 25, -105, 26, 437, 27, 471, 618, 472, 628, 634,
! 267, 268, 269, 440, 638, -246, 639, 458, 640, 441,
! 641, 396, 547, 547, 265, 266, 267, 268, 269, 414,
! 296, 467, 672, 213, 214, 417, 559, 561, -380, -380,
! 490, 317, 48, 594, 28, 250, 252, 48, 500, 753,
! 508, 423, 465, 214, 509, 721, 48, 29, 607, 30,
! 512, 31, 75, 432, 84, 518, 93, 301, 102, 535,
! 111, 539, 120, 669, 129, 546, 138, 716, 214, 550,
! 24, 555, 25, 556, 26, 201, 27, 202, 618, 203,
! 558, 204, 718, 214, 201, 560, 202, 212, 203, 576,
! 204, 463, 8, 104, 675, 569, 393, 577, 10, 11,
! 12, 571, 797, 410, 411, 776, 777, 607, 73, 78,
! 82, 87, 579, 620, 807, 693, 109, 114, 118, 123,
! 813, 76, 80, 85, 89, 94, 98, 103, 107, 112,
! 116, 121, 125, 130, 134, 139, 143, 5, 6, 7,
! 8, 9, 657, 698, 699, -31, 10, 11, 12, 762,
! 828, 829, 701, 831, 702, 703, 704, 705, 678, 147,
! 679, 680, 14, 291, 292, -32, 687, 688, 689, 544,
! 694, 697, 291, 292, 700, 755, 782, 784, 301, 277,
! 606, -108, -108, -108, -108, -108, 752, 726, 727, 754,
! -108, -108, -108, 767, 786, 768, 473, 831, 793, 466,
! 796, 864, 798, 454, 830, 803, -108, 835, 804, 474,
! 806, 839, 573, 574, 845, 848, 575, 317, 317, 849,
! 48, 854, 28, 851, 874, 865, 831, 885, 853, 491,
! 858, 867, 471, 872, 472, 29, 873, 30, 880, 31,
! 881, 883, 504, 507, 888, 74, 79, 83, 88, 889,
! 891, 890, 895, 110, 115, 119, 124, 896, 24, 461,
! 25, 407, 26, 648, 27, 493, 618, -108, 649, 393,
! 393, 454, 454, 528, 454, 73, 78, 82, 87, 652,
! 673, 497, 653, 494, 395, 665, 287, 748, 459, 683,
! 781, 211, 775, 513, -27, -27, -27, -27, -27, 734,
! 421, 739, 428, -27, -27, -27, 91, 96, 100, 105,
! 457, 511, 549, 837, 127, 132, 136, 141, 212, -27,
! 838, -273, 866, 566, 710, 568, 0, 868, 714, 715,
! 0, 545, 720, 0, 0, -273, 0, 723, 724, 0,
! 725, 92, 97, 101, 106, 0, 0, 0, 0, 128,
! 133, 137, 142, 855, 0, 393, 393, 319, 213, 214,
! -23, -23, -23, -23, -23, 0, 0, 0, 0, -23,
! -23, -23, 0, 738, 0, -273, 742, 0, 0, -273,
! -27, 0, 0, 0, 212, -23, 0, -273, 262, 263,
! 264, 265, 266, 267, 268, 269, 5, 6, 7, 8,
! 72, -273, 0, 0, 0, 10, 11, 12, 73, 78,
! 82, 87, 74, 79, 83, 88, 0, 0, 0, 0,
! 296, 14, 296, 15, 213, 214, 5, 6, 7, 8,
! 81, 696, 0, 717, 719, 10, 11, 12, 0, 0,
! 788, -273, 0, 0, 790, -273, -23, 0, 0, 0,
! 0, 14, 313, 15, 0, -19, -19, -19, -19, -19,
! 6, 7, 8, 95, -19, -19, -19, 0, 10, 11,
! 12, 0, 0, 91, 96, 100, 105, -242, 0, 212,
! -19, 287, -273, 0, 0, 816, 817, 0, 818, 0,
! 0, 735, 0, 819, 507, 820, -273, 0, 8, 90,
! 0, 0, 825, 0, 10, 11, 12, -244, 92, 97,
! 101, 106, 0, 0, 0, 0, 6, 7, 8, 90,
! 393, 393, 15, 0, 10, 11, 12, 0, 5, 393,
! 393, 8, 77, 393, 393, 0, -273, 10, 11, 12,
! -273, -19, 15, 8, 99, 74, 79, 83, 88, 10,
! 11, 12, 0, 14, 0, 73, 78, 0, 0, 109,
! 114, 148, 149, 6, 7, 281, 282, 15, 76, 80,
! 94, 98, 112, 116, 130, 134, 0, 6, 7, 8,
! 104, 0, 717, 719, 719, 10, 11, 12, 0, 322,
! 0, 0, 5, 0, 528, 8, 9, 0, 0, 0,
! 0, 10, 11, 12, 0, 0, 91, 96, 100, 105,
! 263, 264, 265, 266, 267, 268, 269, 14, 0, 15,
! 16, 468, 0, 469, 5, 6, 7, 8, 9, 0,
! 0, 470, 0, 10, 11, 12, 528, 344, 345, 0,
! 0, 92, 97, 101, 106, 0, 0, 0, 351, 14,
! 0, 0, 0, 354, 355, 0, 0, -249, 360, 361,
! 362, 363, 364, 365, 366, 367, 368, 369, 370, 371,
! 859, 860, 0, 323, -372, 0, 5, 6, 7, 8,
! 108, 6, 7, 8, 99, 10, 11, 12, 0, 10,
! 11, 12, 74, 79, 0, 0, 110, 115, 0, 0,
! 0, 14, 0, 15, -532, 0, 0, 15, 6, 7,
! 8, 126, 0, 0, 0, 0, 10, 11, 12, 0,
! 0, 0, 73, 78, 82, 87, 0, 0, 0, 0,
! 109, 114, 118, 123, 15, 76, 80, 85, 89, 94,
! 98, 103, 107, 112, 116, 121, 125, 130, 134, 139,
! 143, 91, 96, 0, 0, 127, 132, -250, 438, 439,
! 0, -248, 0, 0, 242, 0, 157, 5, 0, 0,
! 8, 9, 158, 159, 0, 160, 10, 11, 12, 0,
! 0, 0, 0, 0, 0, 0, 92, 97, -254, 0,
! 128, 133, 14, 161, 15, 16, 0, 162, 163, 164,
! 165, 166, 0, 0, 322, 0, 167, 5, 0, 0,
! 8, 9, 168, 0, 0, 169, 10, 11, 12, 0,
! 170, 171, 172, 0, 0, 510, 173, 174, 0, 0,
! 515, 175, 14, 0, 15, 16, 0, 519, 0, 0,
! 0, 0, 0, 0, 0, 0, 580, 0, 157, 0,
! 176, 177, 0, 243, 158, 159, 0, 160, 0, 74,
! 79, 83, 88, 6, 7, 8, 135, 110, 115, 119,
! 124, 10, 11, 12, 0, 161, 0, 16, 0, 162,
! 163, 164, 165, 166, 0, 0, 0, 0, 167, 15,
! -316, 0, 0, 0, 168, 564, 0, 169, 0, 0,
! 0, 0, 170, 171, 172, 0, 0, 0, 173, 174,
! 0, 0, -316, 175, -316, 5, 0, 586, 8, 72,
! 91, 96, 100, 105, 10, 11, 12, 0, 127, 132,
! 136, 141, 176, 177, 0, 584, 6, 7, 8, 126,
! 14, 0, 15, -256, 10, 11, 12, 0, 0, 0,
! 5, 6, 7, 8, 72, 92, 97, 101, 106, 10,
! 11, 12, 15, 128, 133, 137, 142, 564, 0, 0,
! 5, 6, 7, 8, 117, 14, 0, 15, 674, 10,
! 11, 12, 0, 676, 0, 0, 0, 0, 0, 0,
! 0, 0, 586, 685, 0, 14, 0, 15, 686, 276,
! 0, -446, -446, -446, -446, -446, -446, -446, -446, 0,
! -446, -446, -446, -446, -446, 0, -446, -446, -446, -446,
! -446, -446, -446, -446, -446, -446, -446, -446, -446, -446,
! -446, -446, -446, -446, -446, -446, -446, 0, 0, 0,
! 0, -446, 0, 0, 0, 0, 0, -446, 0, 5,
! -446, -252, 8, 81, 0, -446, -446, -446, 10, 11,
! 12, -446, -446, 586, 0, 0, -446, 0, 736, 0,
! 0, 740, 0, 0, 14, 0, 15, 586, 0, 0,
! 586, 0, 586, -446, 277, -446, -446, 0, -446, 0,
! 0, 0, 0, 0, 0, 0, 0, 444, 0, -470,
! -470, -470, -470, -470, -470, -470, -470, 0, -470, -470,
! -470, -470, -470, 0, -470, -470, -470, -470, -470, -470,
! -470, -470, -470, -470, -470, -470, -470, -470, -470, 0,
! -470, -470, -470, -470, -470, 0, 0, 789, 0, -470,
! 0, 791, 0, 0, 792, -470, 0, 586, -470, 0,
! 795, 0, 0, -470, -470, -470, 0, 0, 0, -470,
! -470, 0, 0, 0, -470, 5, 6, 7, 8, 77,
! 6, 7, 8, 131, 10, 11, 12, 0, 10, 11,
! 12, -470, 0, -470, -470, 769, -470, -448, -448, 0,
! 14, 0, 0, -448, -448, 0, -448, 0, 0, 0,
! -448, 0, -448, -448, -448, -448, -448, -448, -448, -448,
! -448, -448, -448, 0, -448, 0, -448, 0, -448, -448,
! -448, -448, -448, 0, 0, 0, 0, -448, 0, 6,
! 7, 8, 131, -448, 0, 0, -448, 10, 11, 12,
! 0, -448, -448, -448, 0, 0, -243, -448, -448, 0,
! -255, 0, -448, 5, 6, 7, 8, 86, 6, 7,
! 8, 140, 10, 11, 12, 0, 10, 11, 12, -448,
! 0, -448, -448, 808, -448, -477, -477, 0, 14, 0,
! 0, -477, -477, 0, -477, 0, 0, 0, -477, 0,
! -477, -477, -477, -477, -477, -477, -477, -477, -477, -477,
! -477, 0, -477, 0, -477, 0, -477, -477, -477, -477,
! -477, 0, 0, 0, 0, -477, 0, 6, 7, 8,
! 99, -477, 0, 0, -477, 10, 11, 12, 0, -477,
! -477, -477, 0, 0, -245, -477, -477, 0, -257, 580,
! -477, 581, 149, 15, 0, 0, 0, 158, 159, 0,
! 160, 0, 0, 0, 0, 0, 0, -477, 0, -477,
! -477, 0, -477, 0, 0, 0, 0, 0, 161, 0,
! 16, 0, 162, 163, 164, 165, 166, 0, 0, 0,
! 0, 167, 0, 6, 7, 8, 135, 168, 0, 0,
! 169, 10, 11, 12, 0, 170, 171, 172, 0, 0,
! 0, 173, 174, 0, 0, 582, 175, 583, 580, 15,
! 581, 149, 0, 0, 0, 0, 158, 159, 0, 160,
! 0, 0, 0, 0, -303, 176, 177, 0, 584, 0,
! 0, 0, 0, 0, 0, 0, 0, 161, 0, 16,
! 0, 162, 163, 164, 165, 166, 0, 0, 0, 0,
! 167, 0, 0, 0, 0, 0, 168, 0, 5, 169,
! 0, 8, 86, 0, 170, 171, 172, 10, 11, 12,
! 173, 174, 0, 0, 582, 175, 583, 562, 0, 157,
! 0, 0, 0, 14, 0, 158, 159, 0, 160, 0,
! 0, 0, 0, -369, 176, 177, 0, 584, 0, 0,
! 0, 0, 0, 0, 0, 0, 161, 0, 16, 0,
! 162, 163, 164, 165, 166, 0, 0, 0, 0, 167,
! 5, 6, 7, 8, 113, 168, 0, 0, 169, 10,
! 11, 12, 0, 170, 171, 172, 0, 0, 0, 173,
! 174, 580, 0, 157, 175, 14, 0, 0, 0, 158,
! 159, 0, 160, 0, 0, 0, 0, 0, 0, 6,
! 7, 8, 104, 176, 177, 0, 563, 10, 11, 12,
! 161, 0, 16, 0, 162, 163, 164, 165, 166, 0,
! 0, 0, 0, 167, 5, 6, 7, 8, 77, 168,
! 0, 0, 169, 10, 11, 12, 0, 170, 171, 172,
! 0, -251, 0, 173, 174, 157, 0, 0, 175, 14,
! 0, 158, 159, 0, 160, 258, 259, 260, 261, 262,
! 263, 264, 265, 266, 267, 268, 269, 176, 177, 0,
! 584, 0, 161, 0, 16, 0, 162, 163, 164, 165,
! 166, 0, 0, 0, 0, 167, 157, 0, 0, 0,
! 0, 168, 158, 159, 169, 160, 0, 0, 0, 170,
! 171, 401, 0, 0, 0, 173, 174, 0, 0, 0,
! 175, 0, 0, 161, 0, 16, 0, 162, 163, 164,
! 165, 166, 0, 0, 0, 0, 167, 0, 0, 176,
! 177, 0, 168, 402, 0, 169, 0, 0, 0, 0,
! 170, 171, 172, 0, 0, 0, 173, 174, 0, 0,
! 0, 175, 0, 0, 0, 0, 581, 597, 6, 7,
! 8, 9, 158, 159, 0, 160, 10, 11, 12, 0,
! 176, 177, 0, 0, 489, 598, 599, 600, 601, 602,
! 603, 604, 14, 161, 15, 16, 0, 162, 163, 164,
! 165, 166, 0, 0, 0, 0, 167, 5, 6, 7,
! 8, 122, 168, 0, 0, 169, 10, 11, 12, 0,
! 170, 171, 172, 0, 0, 0, 173, 174, 0, 0,
! 0, 175, 14, 0, 0, 581, 149, 0, 0, 0,
! 0, 158, 159, 0, 160, 0, 0, 0, 605, 0,
! 176, 177, 0, 606, 598, 599, 600, 601, 602, 603,
! 604, 0, 161, 0, 16, 0, 162, 163, 164, 165,
! 166, 0, 0, 0, 0, 167, 0, 0, 0, 0,
! 0, 168, 0, 5, 169, 0, 8, 9, -253, 170,
! 171, 172, 10, 11, 12, 173, 174, 157, 0, 0,
! 175, 0, 0, 158, 159, 0, 160, 0, 14, 0,
! 15, 0, 0, 0, 0, 0, 0, 605, 0, 176,
! 177, 0, 606, 0, 161, 0, 16, 0, 162, 163,
! 164, 165, 166, 0, 0, 0, 0, 167, 0, 6,
! 7, 8, 140, 168, 0, 0, 169, 10, 11, 12,
! 0, 170, 171, 172, 0, 0, 0, 173, 174, 0,
! 0, 0, 175, 157, 5, 6, 7, 8, 9, 158,
! 159, 0, 160, 10, 11, 12, 5, 6, 7, 8,
! 113, 176, 177, 0, 432, 10, 11, 12, 0, 14,
! 161, 15, 16, 0, 162, 163, 164, 165, 166, 0,
! 0, 14, 0, 167, 0, 0, 0, 0, 0, 168,
! 0, 0, 169, 0, 0, 0, 0, 170, 171, 172,
! 0, 0, 0, 173, 174, 157, 5, 0, 175, 8,
! 9, 158, 159, 0, 160, 10, 11, 12, 261, 262,
! 263, 264, 265, 266, 267, 268, 269, 176, 177, 0,
! 0, 14, 161, 15, 16, 0, 162, 163, 164, 165,
! 166, 0, 0, 0, 0, 167, 157, 0, 0, 0,
! 0, 168, 158, 159, 169, 160, 0, 0, 0, 170,
! 171, 172, 0, 0, 0, 173, 174, 0, 0, 0,
! 175, 0, 0, 161, 0, 16, 0, 162, 163, 164,
! 165, 166, 0, 0, 0, 0, 167, 157, 0, 176,
! 177, 0, 168, 158, 159, 169, 160, 0, 0, 0,
! 170, 171, 172, 0, 0, 0, 173, 174, 0, 0,
! 0, 175, 0, 0, 161, 0, 16, 0, 162, 163,
! 164, 165, 166, 0, 0, 0, 0, 167, 690, 0,
! 176, 177, 0, 168, 0, 0, 169, 0, 0, 0,
! 0, 170, 171, 172, 0, 0, 0, 173, 174, 157,
! 0, 0, 175, 0, 0, 158, 159, 0, 160, 259,
! 260, 261, 262, 263, 264, 265, 266, 267, 268, 269,
! 0, 176, 177, 0, 0, 0, 161, 0, 16, 0,
! 162, 163, 164, 165, 166, 0, 0, 0, 0, 167,
! 157, 0, 0, 0, 0, 168, 158, 159, 169, 160,
! 0, 0, 0, 170, 171, 172, 0, 0, 0, 173,
! 174, 0, 0, 0, 249, 0, 0, 161, 0, 16,
! 0, 162, 163, 164, 165, 166, 0, 0, 0, 0,
! 167, 460, 0, 176, 177, 0, 168, 158, 159, 169,
! 160, 0, 0, 0, 170, 171, 172, 0, 0, 0,
! 173, 174, 0, 0, 0, 251, 0, 0, 161, 0,
! 16, 0, 162, 163, 164, 165, 166, 0, 0, 0,
! 0, 167, 0, 0, 176, 177, 0, 168, 0, 0,
! 169, 0, 0, 0, 0, 170, 171, 172, 0, 0,
! 0, 173, 174, 0, 744, 4, 175, -117, 5, 6,
! 7, 8, 9, 0, 0, 0, 0, 10, 11, 12,
! 0, 0, 0, 0, 0, 176, 177, 0, 0, 0,
! 0, 0, 13, 14, 0, 15, 16, 253, 254, 255,
! 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
! 265, 266, 267, 268, 269, 0, 0, 750, 5, 6,
! 7, 8, 108, -117, 0, 0, 0, 10, 11, 12,
! 0, 0, -117, 260, 261, 262, 263, 264, 265, 266,
! 267, 268, 269, 14, 745, 15, 0, 0, 0, 17,
! 253, 254, 255, 751, 256, 257, 258, 259, 260, 261,
! 262, 263, 264, 265, 266, 267, 268, 269, 253, 254,
! 255, 0, 256, 257, 258, 259, 260, 261, 262, 263,
! 264, 265, 266, 267, 268, 269, 253, 254, 255, 0,
! 256, 257, 258, 259, 260, 261, 262, 263, 264, 265,
! 266, 267, 268, 269, 0, 0, 0, 0, 0, 0,
! 0, 0, 253, 254, 255, 821, 256, 257, 258, 259,
! 260, 261, 262, 263, 264, 265, 266, 267, 268, 269,
! 0, 429, 253, 254, 255, 0, 256, 257, 258, 259,
! 260, 261, 262, 263, 264, 265, 266, 267, 268, 269,
! 0, 0, 0, 0, 253, 254, 255, 430, 256, 257,
258, 259, 260, 261, 262, 263, 264, 265, 266, 267,
! 268, 269, 0, 0, 0, 0, 0, 578, 15, 0,
! 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
! 0, 253, 254, 255, 743, 256, 257, 258, 259, 260,
! 261, 262, 263, 264, 265, 266, 267, 268, 269, 5,
! 6, 7, 8, 81, 0, 0, 0, 0, 10, 11,
! 12, 5, 6, 7, 8, 117, 0, 0, 0, 0,
! 10, 11, 12, 0, 14, 0, 15, 0, 0, 0,
! 5, 6, 7, 8, 86, 0, 14, 0, 15, 10,
! 11, 12, 5, 6, 7, 8, 122, 0, 0, 0,
! 0, 10, 11, 12, 0, 14, 0, 0, 0, 0,
! 0, 0, 0, 0, 0, 0, 0, 14, 253, 254,
! 255, 822, 256, 257, 258, 259, 260, 261, 262, 263,
! 264, 265, 266, 267, 268, 269, 253, 254, 255, 0,
! 256, 257, 258, 259, 260, 261, 262, 263, 264, 265,
! 266, 267, 268, 269, 255, 0, 256, 257, 258, 259,
! 260, 261, 262, 263, 264, 265, 266, 267, 268, 269,
! 257, 258, 259, 260, 261, 262, 263, 264, 265, 266,
! 267, 268, 269
};
static const short yycheck[] =
{
! 63, 223, 65, 316, 536, 314, 2, 3, 2, 3,
! 144, 320, 289, 145, 10, 11, 12, 398, 274, 536,
! 552, 2, 3, 2, 3, 2, 3, 408, 24, 398,
! 26, 175, 28, 398, 30, 536, 32, 462, 34, 408,
! 36, 312, 38, 408, 2, 3, 2, 3, 2, 3,
! 2, 3, 2, 3, 214, 543, 462, 162, 163, 219,
! 56, 618, 56, 23, 549, 559, 1, 172, 10, 65,
! 592, 67, 304, 178, 1, 56, 48, 56, 595, 56,
! 152, 765, 454, 188, 398, 536, 618, 1, 60, 61,
! 62, 1, 0, 214, 408, 239, 1, 1, 56, 536,
! 56, 552, 56, 75, 56, 249, 56, 251, 229, 67,
! 85, 67, 84, 67, 89, 67, 3, 618, 0, 491,
! 379, 93, 3, 4, 47, 809, 1, 69, 47, 385,
! 102, 31, 504, 3, 4, 507, 3, 4, 298, 111,
! 68, 658, 548, 549, 3, 4, 3, 379, 120, 85,
! 3, 86, 8, 51, 52, 53, 528, 129, 595, 86,
! 682, 84, 543, 40, 41, 84, 138, 618, 852, 56,
! 90, 552, 68, 47, 543, 31, 90, 861, 543, 175,
! 90, 86, 86, 552, 31, 145, 463, 552, 447, 448,
! 449, 450, 59, 68, 566, 191, 568, 193, 850, 195,
! 47, 197, 59, 3, 698, 201, 59, 203, 892, 90,
! 84, 68, 275, 85, 335, 68, 69, 89, 214, 451,
! 90, 68, 69, 219, 68, 747, 386, 879, 8, 543,
! 68, 90, 6, 229, 8, 229, 208, 300, 552, 3,
! 4, 726, 727, 239, 349, 90, 206, 207, 229, 806,
! 229, 31, 229, 249, 90, 251, 214, 31, 214, 59,
! 214, 219, 214, 219, 336, 219, 338, 219, 68, 69,
! 168, 229, 68, 229, 806, 229, 498, 229, 31, 229,
! 85, 86, 538, 47, 45, 429, 28, 431, 713, 31,
! 8, 189, 780, 356, 47, 59, 401, 722, 569, 379,
! 571, 3, 298, 45, 68, 806, 67, 713, 69, 5,
! 6, 7, 8, 31, 68, 663, 722, 13, 14, 15,
! 726, 727, 3, 4, 696, 68, 68, 69, 324, 677,
! 326, 28, 328, 293, 330, 233, 399, 400, 84, 335,
! 298, 335, 298, 85, 298, 47, 298, 89, 89, 309,
! 310, 84, 869, 870, 335, 806, 335, 59, 335, 31,
! 68, 69, 68, 735, 68, 69, 68, 447, 448, 449,
! 450, 68, 69, 84, 272, 273, 84, 335, 59, 335,
! 84, 335, 85, 335, 8, 335, 89, 68, 1, 85,
! 386, 4, 5, 6, 7, 8, 68, 69, 11, 780,
! 13, 14, 15, 716, 398, 718, 8, 28, 84, 68,
! 31, 780, 86, 89, 408, 780, 29, 398, 3, 4,
! 84, 84, 68, 69, 45, 89, 89, 408, 386, 561,
! 386, 86, 386, 429, 386, 431, 570, 714, 84, 59,
! 398, 84, 398, 85, 84, 343, 723, 89, 68, 69,
! 408, 84, 408, 7, 8, 332, 333, 84, 47, 13,
! 14, 15, 89, 623, 85, 84, 780, 664, 89, 666,
! 89, 84, 632, 536, 59, 471, 85, 473, 85, 475,
! 378, 477, 89, 68, 69, 85, 384, 859, 860, 89,
! 85, 800, 1, 802, 89, 4, 5, 6, 7, 8,
! 1, 84, 3, 4, 13, 14, 15, 213, 85, 33,
! 216, 84, 89, 618, 220, 5, 6, 7, 8, 68,
! 29, 10, 85, 13, 14, 15, 89, 6, 426, 85,
! 63, 64, 595, 66, 67, 68, 69, 759, 45, 602,
! 536, 31, 536, 4, 5, 6, 7, 8, 85, 543,
! 11, 45, 13, 14, 15, 536, 552, 536, 552, 536,
! 3, 4, 543, 89, 698, 68, 69, 699, 29, 89,
! 31, 552, 84, 552, 84, 552, 447, 448, 536, 450,
! 536, 90, 536, 47, 536, 543, 536, 543, 548, 549,
! 59, 60, 61, 84, 552, 85, 552, 84, 552, 91,
! 552, 561, 479, 480, 57, 58, 59, 60, 61, 315,
! 316, 84, 572, 68, 69, 321, 493, 494, 85, 86,
! 91, 224, 618, 521, 618, 182, 183, 623, 45, 692,
! 86, 337, 68, 69, 86, 631, 632, 618, 536, 618,
! 86, 618, 638, 90, 640, 47, 642, 1, 644, 86,
! 646, 84, 648, 787, 650, 84, 652, 68, 69, 84,
! 618, 91, 618, 91, 618, 623, 618, 623, 618, 623,
! 85, 623, 68, 69, 632, 85, 632, 28, 632, 86,
! 632, 387, 7, 8, 582, 89, 289, 84, 13, 14,
! 15, 89, 755, 309, 310, 713, 714, 595, 24, 25,
! 26, 27, 84, 84, 767, 603, 32, 33, 34, 35,
! 773, 24, 25, 26, 27, 28, 29, 30, 31, 32,
! 33, 34, 35, 36, 37, 38, 39, 4, 5, 6,
! 7, 8, 3, 610, 611, 47, 13, 14, 15, 699,
! 803, 804, 16, 806, 18, 19, 20, 21, 47, 721,
! 86, 89, 29, 713, 714, 47, 47, 85, 85, 465,
! 8, 85, 722, 723, 85, 68, 726, 727, 1, 86,
! 90, 4, 5, 6, 7, 8, 85, 654, 655, 85,
! 13, 14, 15, 68, 86, 17, 780, 850, 86, 392,
! 85, 854, 47, 379, 18, 68, 29, 84, 68, 780,
! 68, 84, 508, 509, 85, 84, 512, 410, 411, 84,
! 806, 68, 806, 85, 10, 91, 879, 880, 85, 405,
! 89, 85, 780, 85, 780, 806, 84, 806, 68, 806,
! 10, 85, 418, 419, 84, 24, 25, 26, 27, 84,
! 10, 85, 0, 32, 33, 34, 35, 0, 806, 385,
! 806, 305, 806, 552, 806, 408, 806, 90, 552, 462,
! 463, 447, 448, 449, 450, 191, 192, 193, 194, 552,
! 576, 412, 552, 408, 293, 567, 189, 680, 384, 591,
! 726, 1, 713, 428, 4, 5, 6, 7, 8, 667,
! 335, 670, 343, 13, 14, 15, 28, 29, 30, 31,
! 380, 426, 480, 810, 36, 37, 38, 39, 28, 29,
! 812, 31, 856, 499, 614, 501, -1, 858, 624, 625,
! -1, 465, 628, -1, -1, 45, -1, 633, 634, -1,
! 636, 28, 29, 30, 31, -1, -1, -1, -1, 36,
! 37, 38, 39, 841, -1, 548, 549, 1, 68, 69,
! 4, 5, 6, 7, 8, -1, -1, -1, -1, 13,
! 14, 15, -1, 669, -1, 85, 672, -1, -1, 89,
! 90, -1, -1, -1, 28, 29, -1, 31, 54, 55,
! 56, 57, 58, 59, 60, 61, 4, 5, 6, 7,
! 8, 45, -1, -1, -1, 13, 14, 15, 324, 325,
! 326, 327, 191, 192, 193, 194, -1, -1, -1, -1,
! 716, 29, 718, 31, 68, 69, 4, 5, 6, 7,
! 8, 607, -1, 626, 627, 13, 14, 15, -1, -1,
! 736, 85, -1, -1, 740, 89, 90, -1, -1, -1,
! -1, 29, 1, 31, -1, 4, 5, 6, 7, 8,
! 5, 6, 7, 8, 13, 14, 15, -1, 13, 14,
! 15, -1, -1, 195, 196, 197, 198, 85, -1, 28,
! 29, 384, 31, -1, -1, 781, 782, -1, 784, -1,
! -1, 667, -1, 789, 670, 791, 45, -1, 7, 8,
! -1, -1, 798, -1, 13, 14, 15, 85, 195, 196,
! 197, 198, -1, -1, -1, -1, 5, 6, 7, 8,
! 713, 714, 31, -1, 13, 14, 15, -1, 4, 722,
! 723, 7, 8, 726, 727, -1, 85, 13, 14, 15,
! 89, 90, 31, 7, 8, 324, 325, 326, 327, 13,
! 14, 15, -1, 29, -1, 471, 472, -1, -1, 475,
! 476, 3, 4, 5, 6, 7, 8, 31, 471, 472,
! 473, 474, 475, 476, 477, 478, -1, 5, 6, 7,
! 8, -1, 775, 776, 777, 13, 14, 15, -1, 1,
! -1, -1, 4, -1, 770, 7, 8, -1, -1, -1,
! -1, 13, 14, 15, -1, -1, 328, 329, 330, 331,
! 55, 56, 57, 58, 59, 60, 61, 29, -1, 31,
! 32, 1, -1, 3, 4, 5, 6, 7, 8, -1,
! -1, 11, -1, 13, 14, 15, 812, 237, 238, -1,
! -1, 328, 329, 330, 331, -1, -1, -1, 248, 29,
! -1, -1, -1, 253, 254, -1, -1, 85, 258, 259,
! 260, 261, 262, 263, 264, 265, 266, 267, 268, 269,
! 846, 847, -1, 85, 86, -1, 4, 5, 6, 7,
! 8, 5, 6, 7, 8, 13, 14, 15, -1, 13,
! 14, 15, 471, 472, -1, -1, 475, 476, -1, -1,
! -1, 29, -1, 31, 84, -1, -1, 31, 5, 6,
! 7, 8, -1, -1, -1, -1, 13, 14, 15, -1,
! -1, -1, 638, 639, 640, 641, -1, -1, -1, -1,
! 646, 647, 648, 649, 31, 638, 639, 640, 641, 642,
! 643, 644, 645, 646, 647, 648, 649, 650, 651, 652,
! 653, 473, 474, -1, -1, 477, 478, 85, 358, 359,
! -1, 85, -1, -1, 1, -1, 3, 4, -1, -1,
! 7, 8, 9, 10, -1, 12, 13, 14, 15, -1,
! -1, -1, -1, -1, -1, -1, 473, 474, 85, -1,
! 477, 478, 29, 30, 31, 32, -1, 34, 35, 36,
! 37, 38, -1, -1, 1, -1, 43, 4, -1, -1,
! 7, 8, 49, -1, -1, 52, 13, 14, 15, -1,
! 57, 58, 59, -1, -1, 425, 63, 64, -1, -1,
! 430, 68, 29, -1, 31, 32, -1, 437, -1, -1,
! -1, -1, -1, -1, -1, -1, 1, -1, 3, -1,
! 87, 88, -1, 90, 9, 10, -1, 12, -1, 638,
! 639, 640, 641, 5, 6, 7, 8, 646, 647, 648,
! 649, 13, 14, 15, -1, 30, -1, 32, -1, 34,
! 35, 36, 37, 38, -1, -1, -1, -1, 43, 31,
! 45, -1, -1, -1, 49, 495, -1, 52, -1, -1,
! -1, -1, 57, 58, 59, -1, -1, -1, 63, 64,
! -1, -1, 67, 68, 69, 4, -1, 517, 7, 8,
! 642, 643, 644, 645, 13, 14, 15, -1, 650, 651,
! 652, 653, 87, 88, -1, 90, 5, 6, 7, 8,
! 29, -1, 31, 85, 13, 14, 15, -1, -1, -1,
! 4, 5, 6, 7, 8, 642, 643, 644, 645, 13,
! 14, 15, 31, 650, 651, 652, 653, 567, -1, -1,
! 4, 5, 6, 7, 8, 29, -1, 31, 578, 13,
! 14, 15, -1, 583, -1, -1, -1, -1, -1, -1,
! -1, -1, 592, 593, -1, 29, -1, 31, 598, 1,
! -1, 3, 4, 5, 6, 7, 8, 9, 10, -1,
! 12, 13, 14, 15, 16, -1, 18, 19, 20, 21,
! 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
! 32, 33, 34, 35, 36, 37, 38, -1, -1, -1,
! -1, 43, -1, -1, -1, -1, -1, 49, -1, 4,
! 52, 85, 7, 8, -1, 57, 58, 59, 13, 14,
! 15, 63, 64, 663, -1, -1, 68, -1, 668, -1,
! -1, 671, -1, -1, 29, -1, 31, 677, -1, -1,
! 680, -1, 682, 85, 86, 87, 88, -1, 90, -1,
! -1, -1, -1, -1, -1, -1, -1, 1, -1, 3,
! 4, 5, 6, 7, 8, 9, 10, -1, 12, 13,
! 14, 15, 16, -1, 18, 19, 20, 21, 22, 23,
! 24, 25, 26, 27, 28, 29, 30, 31, 32, -1,
! 34, 35, 36, 37, 38, -1, -1, 737, -1, 43,
! -1, 741, -1, -1, 744, 49, -1, 747, 52, -1,
! 750, -1, -1, 57, 58, 59, -1, -1, -1, 63,
! 64, -1, -1, -1, 68, 4, 5, 6, 7, 8,
! 5, 6, 7, 8, 13, 14, 15, -1, 13, 14,
! 15, 85, -1, 87, 88, 1, 90, 3, 4, -1,
! 29, -1, -1, 9, 10, -1, 12, -1, -1, -1,
! 16, -1, 18, 19, 20, 21, 22, 23, 24, 25,
! 26, 27, 28, -1, 30, -1, 32, -1, 34, 35,
! 36, 37, 38, -1, -1, -1, -1, 43, -1, 5,
! 6, 7, 8, 49, -1, -1, 52, 13, 14, 15,
! -1, 57, 58, 59, -1, -1, 85, 63, 64, -1,
! 85, -1, 68, 4, 5, 6, 7, 8, 5, 6,
! 7, 8, 13, 14, 15, -1, 13, 14, 15, 85,
! -1, 87, 88, 1, 90, 3, 4, -1, 29, -1,
! -1, 9, 10, -1, 12, -1, -1, -1, 16, -1,
! 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
! 28, -1, 30, -1, 32, -1, 34, 35, 36, 37,
! 38, -1, -1, -1, -1, 43, -1, 5, 6, 7,
8, 49, -1, -1, 52, 13, 14, 15, -1, 57,
! 58, 59, -1, -1, 85, 63, 64, -1, 85, 1,
! 68, 3, 4, 31, -1, -1, -1, 9, 10, -1,
! 12, -1, -1, -1, -1, -1, -1, 85, -1, 87,
! 88, -1, 90, -1, -1, -1, -1, -1, 30, -1,
! 32, -1, 34, 35, 36, 37, 38, -1, -1, -1,
! -1, 43, -1, 5, 6, 7, 8, 49, -1, -1,
! 52, 13, 14, 15, -1, 57, 58, 59, -1, -1,
! -1, 63, 64, -1, -1, 67, 68, 69, 1, 31,
! 3, 4, -1, -1, -1, -1, 9, 10, -1, 12,
! -1, -1, -1, -1, 86, 87, 88, -1, 90, -1,
! -1, -1, -1, -1, -1, -1, -1, 30, -1, 32,
-1, 34, 35, 36, 37, 38, -1, -1, -1, -1,
! 43, -1, -1, -1, -1, -1, 49, -1, 4, 52,
! -1, 7, 8, -1, 57, 58, 59, 13, 14, 15,
! 63, 64, -1, -1, 67, 68, 69, 1, -1, 3,
! -1, -1, -1, 29, -1, 9, 10, -1, 12, -1,
! -1, -1, -1, 86, 87, 88, -1, 90, -1, -1,
! -1, -1, -1, -1, -1, -1, 30, -1, 32, -1,
! 34, 35, 36, 37, 38, -1, -1, -1, -1, 43,
! 4, 5, 6, 7, 8, 49, -1, -1, 52, 13,
! 14, 15, -1, 57, 58, 59, -1, -1, -1, 63,
! 64, 1, -1, 3, 68, 29, -1, -1, -1, 9,
! 10, -1, 12, -1, -1, -1, -1, -1, -1, 5,
! 6, 7, 8, 87, 88, -1, 90, 13, 14, 15,
30, -1, 32, -1, 34, 35, 36, 37, 38, -1,
! -1, -1, -1, 43, 4, 5, 6, 7, 8, 49,
! -1, -1, 52, 13, 14, 15, -1, 57, 58, 59,
! -1, 85, -1, 63, 64, 3, -1, -1, 68, 29,
! -1, 9, 10, -1, 12, 50, 51, 52, 53, 54,
! 55, 56, 57, 58, 59, 60, 61, 87, 88, -1,
! 90, -1, 30, -1, 32, -1, 34, 35, 36, 37,
! 38, -1, -1, -1, -1, 43, 3, -1, -1, -1,
-1, 49, 9, 10, 52, 12, -1, -1, -1, 57,
! 58, 59, -1, -1, -1, 63, 64, -1, -1, -1,
! 68, -1, -1, 30, -1, 32, -1, 34, 35, 36,
37, 38, -1, -1, -1, -1, 43, -1, -1, 87,
88, -1, 49, 91, -1, 52, -1, -1, -1, -1,
! 57, 58, 59, -1, -1, -1, 63, 64, -1, -1,
! -1, 68, -1, -1, -1, -1, 3, 4, 5, 6,
! 7, 8, 9, 10, -1, 12, 13, 14, 15, -1,
87, 88, -1, -1, 91, 22, 23, 24, 25, 26,
27, 28, 29, 30, 31, 32, -1, 34, 35, 36,
37, 38, -1, -1, -1, -1, 43, 4, 5, 6,
7, 8, 49, -1, -1, 52, 13, 14, 15, -1,
! 57, 58, 59, -1, -1, -1, 63, 64, -1, -1,
! -1, 68, 29, -1, -1, 3, 4, -1, -1, -1,
-1, 9, 10, -1, 12, -1, -1, -1, 85, -1,
87, 88, -1, 90, 22, 23, 24, 25, 26, 27,
28, -1, 30, -1, 32, -1, 34, 35, 36, 37,
! 38, -1, -1, -1, -1, 43, -1, -1, -1, -1,
! -1, 49, -1, 4, 52, -1, 7, 8, 85, 57,
! 58, 59, 13, 14, 15, 63, 64, 3, -1, -1,
! 68, -1, -1, 9, 10, -1, 12, -1, 29, -1,
! 31, -1, -1, -1, -1, -1, -1, 85, -1, 87,
! 88, -1, 90, -1, 30, -1, 32, -1, 34, 35,
! 36, 37, 38, -1, -1, -1, -1, 43, -1, 5,
! 6, 7, 8, 49, -1, -1, 52, 13, 14, 15,
! -1, 57, 58, 59, -1, -1, -1, 63, 64, -1,
! -1, -1, 68, 3, 4, 5, 6, 7, 8, 9,
! 10, -1, 12, 13, 14, 15, 4, 5, 6, 7,
! 8, 87, 88, -1, 90, 13, 14, 15, -1, 29,
! 30, 31, 32, -1, 34, 35, 36, 37, 38, -1,
! -1, 29, -1, 43, -1, -1, -1, -1, -1, 49,
! -1, -1, 52, -1, -1, -1, -1, 57, 58, 59,
! -1, -1, -1, 63, 64, 3, 4, -1, 68, 7,
! 8, 9, 10, -1, 12, 13, 14, 15, 53, 54,
! 55, 56, 57, 58, 59, 60, 61, 87, 88, -1,
! -1, 29, 30, 31, 32, -1, 34, 35, 36, 37,
! 38, -1, -1, -1, -1, 43, 3, -1, -1, -1,
-1, 49, 9, 10, 52, 12, -1, -1, -1, 57,
! 58, 59, -1, -1, -1, 63, 64, -1, -1, -1,
! 68, -1, -1, 30, -1, 32, -1, 34, 35, 36,
37, 38, -1, -1, -1, -1, 43, 3, -1, 87,
88, -1, 49, 9, 10, 52, 12, -1, -1, -1,
! 57, 58, 59, -1, -1, -1, 63, 64, -1, -1,
! -1, 68, -1, -1, 30, -1, 32, -1, 34, 35,
! 36, 37, 38, -1, -1, -1, -1, 43, 85, -1,
87, 88, -1, 49, -1, -1, 52, -1, -1, -1,
! -1, 57, 58, 59, -1, -1, -1, 63, 64, 3,
! -1, -1, 68, -1, -1, 9, 10, -1, 12, 51,
52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
! -1, 87, 88, -1, -1, -1, 30, -1, 32, -1,
! 34, 35, 36, 37, 38, -1, -1, -1, -1, 43,
! 3, -1, -1, -1, -1, 49, 9, 10, 52, 12,
! -1, -1, -1, 57, 58, 59, -1, -1, -1, 63,
! 64, -1, -1, -1, 68, -1, -1, 30, -1, 32,
! -1, 34, 35, 36, 37, 38, -1, -1, -1, -1,
! 43, 3, -1, 87, 88, -1, 49, 9, 10, 52,
! 12, -1, -1, -1, 57, 58, 59, -1, -1, -1,
! 63, 64, -1, -1, -1, 68, -1, -1, 30, -1,
! 32, -1, 34, 35, 36, 37, 38, -1, -1, -1,
! -1, 43, -1, -1, 87, 88, -1, 49, -1, -1,
! 52, -1, -1, -1, -1, 57, 58, 59, -1, -1,
! -1, 63, 64, -1, 11, 1, 68, 3, 4, 5,
! 6, 7, 8, -1, -1, -1, -1, 13, 14, 15,
! -1, -1, -1, -1, -1, 87, 88, -1, -1, -1,
! -1, -1, 28, 29, -1, 31, 32, 44, 45, 46,
! -1, 48, 49, 50, 51, 52, 53, 54, 55, 56,
! 57, 58, 59, 60, 61, -1, -1, 11, 4, 5,
! 6, 7, 8, 59, -1, -1, -1, 13, 14, 15,
! -1, -1, 68, 52, 53, 54, 55, 56, 57, 58,
! 59, 60, 61, 29, 91, 31, -1, -1, -1, 85,
! 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
! 54, 55, 56, 57, 58, 59, 60, 61, 44, 45,
! 46, -1, 48, 49, 50, 51, 52, 53, 54, 55,
! 56, 57, 58, 59, 60, 61, 44, 45, 46, -1,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
! 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
! -1, -1, 44, 45, 46, 91, 48, 49, 50, 51,
! 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
! -1, 89, 44, 45, 46, -1, 48, 49, 50, 51,
! 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
! -1, -1, -1, -1, 44, 45, 46, 89, 48, 49,
! 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
! 60, 61, -1, -1, -1, -1, -1, 89, 31, -1,
! -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
! -1, 44, 45, 46, 84, 48, 49, 50, 51, 52,
! 53, 54, 55, 56, 57, 58, 59, 60, 61, 4,
! 5, 6, 7, 8, -1, -1, -1, -1, 13, 14,
! 15, 4, 5, 6, 7, 8, -1, -1, -1, -1,
! 13, 14, 15, -1, 29, -1, 31, -1, -1, -1,
! 4, 5, 6, 7, 8, -1, 29, -1, 31, 13,
! 14, 15, 4, 5, 6, 7, 8, -1, -1, -1,
! -1, 13, 14, 15, -1, 29, -1, -1, -1, -1,
! -1, -1, -1, -1, -1, -1, -1, 29, 44, 45,
! 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
! 56, 57, 58, 59, 60, 61, 44, 45, 46, -1,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
! 58, 59, 60, 61, 46, -1, 48, 49, 50, 51,
! 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
! 59, 60, 61
};
- /* -*-C-*- Note some compilers choke on comments on `#line' lines. */
- #line 3 "/usr/share/bison/bison.simple"
! /* Skeleton output parser for bison,
!
! Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 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 2, 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 this program; if not, write to the Free Software
! Foundation, Inc., 59 Temple Place - Suite 330,
! Boston, MA 02111-1307, USA. */
!
! /* As a special exception, when this file is copied by Bison into a
! Bison output file, you may use that output file without restriction.
! This special exception was added by the Free Software Foundation
! in version 1.24 of Bison. */
!
! /* This is the parser code that is written into each bison parser when
! the %semantic_parser declaration is not specified in the grammar.
! It was written by Richard Stallman by simplifying the hairy parser
! used when %semantic_parser is specified. */
!
! /* All symbols defined below should begin with yy or YY, to avoid
! infringing on user name space. This should be done even for local
! variables, as they might otherwise be expanded by user macros.
! There are some unavoidable exceptions within include files to
! define necessary library symbols; they are noted "INFRINGES ON
! USER NAME SPACE" below. */
!
! #ifdef __cplusplus
! # define YYSTD(x) std::x
! #else
! # define YYSTD(x) x
! #endif
!
! #ifndef YYPARSE_RETURN_TYPE
! #define YYPARSE_RETURN_TYPE int
! #endif
!
! #if ! defined (yyoverflow) || defined (YYERROR_VERBOSE)
!
! /* The parser invokes alloca or malloc; define the necessary symbols. */
!
! # if YYSTACK_USE_ALLOCA
! # define YYSTACK_ALLOC alloca
! # else
! # ifndef YYSTACK_USE_ALLOCA
! # if defined (alloca) || defined (_ALLOCA_H)
! # define YYSTACK_ALLOC alloca
! # else
! # ifdef __GNUC__
! # define YYSTACK_ALLOC __builtin_alloca
! # endif
! # endif
! # endif
! # endif
!
! # ifdef YYSTACK_ALLOC
! /* Pacify GCC's `empty if-body' warning. */
! # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
! # else
! # ifdef __cplusplus
! # include /* INFRINGES ON USER NAME SPACE */
! # define YYSIZE_T std::size_t
! # else
! # ifdef __STDC__
! # include /* INFRINGES ON USER NAME SPACE */
! # define YYSIZE_T size_t
! # endif
! # endif
! # define YYSTACK_ALLOC YYSTD (malloc)
! # define YYSTACK_FREE YYSTD (free)
! # endif
!
! /* A type that is properly aligned for any stack member. */
! union yyalloc
{
! short yyss;
! YYSTYPE yyvs;
! # if YYLSP_NEEDED
! YYLTYPE yyls;
! # endif
};
- /* The size of the maximum gap between one aligned stack and the next. */
- # define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1)
-
- /* The size of an array large to enough to hold all stacks, each with
- N elements. */
- # if YYLSP_NEEDED
- # define YYSTACK_BYTES(N) \
- ((N) * (sizeof (short) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \
- + 2 * YYSTACK_GAP_MAX)
- # else
- # define YYSTACK_BYTES(N) \
- ((N) * (sizeof (short) + sizeof (YYSTYPE)) \
- + YYSTACK_GAP_MAX)
- # endif
-
- /* Relocate the TYPE STACK from its old location to the new one. The
- local variables YYSIZE and YYSTACKSIZE give the old and new number of
- elements in the stack, and YYPTR gives the new location of the
- stack. Advance YYPTR to a properly aligned location for the next
- stack. */
- # define YYSTACK_RELOCATE(Type, Stack) \
- do \
- { \
- YYSIZE_T yynewbytes; \
- yymemcpy ((char *) yyptr, (char *) (Stack), \
- yysize * (YYSIZE_T) sizeof (Type)); \
- Stack = &yyptr->Stack; \
- yynewbytes = yystacksize * sizeof (Type) + YYSTACK_GAP_MAX; \
- yyptr += yynewbytes / sizeof (*yyptr); \
- } \
- while (0)
-
- #endif /* ! defined (yyoverflow) || defined (YYERROR_VERBOSE) */
-
-
#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
# define YYSIZE_T __SIZE_TYPE__
#endif
--- 912,2038 ----
};
#endif
! # ifdef YYPRINT
! /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
! token YYLEX-NUM. */
! static const unsigned short yytoknum[] =
{
! 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
! 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
! 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
! 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
! 295, 296, 297, 298, 61, 299, 63, 58, 300, 301,
! 124, 94, 38, 302, 303, 304, 305, 43, 45, 42,
! 47, 37, 306, 307, 308, 309, 46, 40, 91, 310,
! 311, 312, 313, 314, 315, 316, 317, 318, 319, 320,
! 321, 322, 323, 324, 41, 59, 125, 126, 33, 44,
! 123, 93
};
+ # endif
! /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
! static const unsigned short yyr1[] =
{
! 0, 92, 93, 93, 95, 94, 96, 94, 97, 98,
! 98, 98, 98, 99, 99, 99, 99, 99, 99, 99,
! 101, 102, 100, 100, 103, 104, 100, 100, 105, 106,
! 100, 100, 107, 107, 108, 108, 108, 108, 108, 108,
! 108, 109, 110, 110, 111, 111, 112, 112, 112, 112,
! 112, 112, 112, 112, 112, 112, 112, 113, 114, 115,
! 116, 116, 117, 117, 117, 117, 117, 117, 117, 117,
! 117, 117, 117, 117, 117, 118, 117, 119, 117, 120,
! 121, 117, 122, 117, 117, 117, 123, 123, 123, 123,
! 124, 123, 123, 123, 123, 123, 123, 123, 123, 123,
! 123, 123, 123, 123, 123, 125, 126, 126, 127, 128,
! 128, 128, 128, 129, 129, 129, 129, 130, 131, 132,
! 133, 133, 133, 133, 133, 133, 134, 134, 134, 135,
! 136, 136, 137, 137, 138, 138, 138, 138, 138, 138,
! 138, 139, 139, 139, 139, 139, 139, 140, 140, 140,
! 140, 140, 140, 141, 141, 141, 141, 141, 142, 142,
! 142, 142, 142, 142, 142, 143, 144, 144, 144, 144,
! 144, 144, 145, 146, 146, 146, 146, 146, 146, 146,
! 146, 146, 146, 147, 147, 147, 147, 147, 148, 148,
! 148, 148, 148, 148, 148, 148, 148, 148, 149, 149,
! 149, 149, 149, 150, 150, 150, 150, 150, 150, 150,
! 150, 151, 151, 151, 151, 151, 151, 151, 151, 152,
! 152, 152, 152, 153, 153, 153, 153, 154, 154, 154,
! 154, 155, 155, 155, 155, 156, 156, 156, 156, 156,
! 156, 156, 156, 157, 157, 157, 157, 157, 157, 157,
! 157, 157, 157, 157, 157, 157, 157, 157, 157, 158,
! 158, 159, 159, 160, 161, 161, 162, 163, 163, 163,
! 164, 164, 165, 165, 166, 166, 168, 167, 167, 170,
! 169, 169, 171, 171, 172, 172, 173, 174, 174, 175,
! 175, 175, 175, 175, 176, 176, 176, 176, 177, 177,
! 178, 179, 178, 178, 180, 180, 181, 181, 182, 182,
! 183, 182, 182, 185, 184, 184, 184, 186, 186, 187,
! 187, 187, 189, 190, 188, 192, 193, 191, 194, 194,
! 195, 195, 195, 195, 195, 196, 196, 197, 197, 197,
! 198, 198, 198, 198, 198, 199, 199, 199, 199, 199,
! 200, 200, 201, 201, 202, 202, 204, 203, 203, 205,
! 203, 203, 206, 203, 207, 203, 208, 208, 208, 209,
! 209, 210, 210, 211, 211, 212, 212, 212, 213, 213,
! 213, 213, 213, 213, 214, 214, 215, 215, 216, 216,
! 216, 217, 217, 217, 218, 218, 218, 219, 219, 221,
! 220, 222, 222, 223, 223, 223, 224, 224, 225, 225,
! 226, 226, 227, 227, 227, 227, 227, 228, 228, 228,
! 228, 228, 229, 229, 229, 229, 230, 230, 230, 230,
! 230, 231, 231, 231, 231, 232, 232, 232, 232, 232,
! 233, 233, 234, 234, 234, 234, 235, 236, 237, 238,
! 239, 240, 240, 241, 241, 242, 243, 243, 244, 245,
! 245, 246, 246, 247, 248, 249, 249, 251, 250, 253,
! 252, 254, 255, 256, 256, 257, 258, 259, 261, 260,
! 260, 260, 262, 263, 260, 260, 260, 264, 265, 266,
! 267, 260, 268, 260, 269, 269, 270, 270, 270, 270,
! 270, 270, 270, 270, 270, 270, 270, 270, 270, 270,
! 271, 271, 271, 271, 272, 272, 273, 273, 274, 274,
! 275, 275, 276, 276, 277, 277, 279, 278, 280, 281,
! 282, 280, 280, 283, 283, 283, 283, 284, 284, 285,
! 285, 285, 285, 285, 286, 286, 286, 286, 286, 287,
! 289, 288, 290, 290, 291, 291, 292, 292, 293
! };
!
! /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
! static const unsigned char yyr2[] =
! {
! 0, 2, 0, 1, 0, 2, 0, 3, 1, 1,
! 1, 5, 2, 3, 4, 4, 2, 2, 2, 1,
! 0, 0, 9, 4, 0, 0, 9, 4, 0, 0,
! 8, 3, 1, 1, 1, 1, 1, 1, 1, 1,
! 1, 1, 0, 1, 1, 3, 1, 2, 2, 2,
! 2, 2, 4, 2, 4, 2, 2, 1, 1, 1,
! 1, 4, 1, 3, 3, 3, 3, 3, 3, 3,
! 3, 3, 3, 3, 3, 0, 4, 0, 4, 0,
! 0, 7, 0, 5, 3, 3, 1, 1, 1, 1,
! 0, 7, 3, 3, 3, 3, 4, 6, 8, 6,
! 4, 3, 3, 2, 2, 1, 0, 1, 3, 1,
! 1, 2, 2, 4, 4, 2, 2, 3, 0, 1,
! 4, 4, 3, 3, 2, 2, 1, 2, 2, 2,
! 2, 2, 1, 2, 1, 2, 2, 2, 2, 2,
! 2, 1, 2, 2, 2, 2, 2, 2, 2, 2,
! 2, 2, 2, 2, 2, 2, 2, 2, 1, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 2, 2, 2, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
! 1, 1, 1, 1, 1, 1, 1, 1, 4, 4,
! 1, 4, 1, 4, 0, 4, 0, 6, 3, 0,
! 6, 3, 0, 1, 1, 2, 6, 1, 3, 0,
! 1, 4, 6, 4, 1, 1, 1, 1, 1, 1,
! 1, 0, 4, 1, 0, 2, 1, 3, 3, 2,
! 0, 4, 1, 0, 4, 1, 1, 1, 2, 2,
! 5, 3, 0, 0, 7, 0, 0, 7, 1, 1,
! 4, 3, 2, 3, 1, 1, 1, 3, 2, 1,
! 3, 2, 3, 3, 4, 3, 4, 3, 2, 1,
! 1, 2, 1, 2, 1, 2, 0, 7, 5, 0,
! 7, 5, 0, 8, 0, 7, 2, 2, 2, 0,
! 1, 0, 1, 1, 2, 0, 3, 2, 3, 4,
! 3, 1, 1, 2, 1, 4, 1, 4, 4, 6,
! 5, 4, 6, 5, 1, 3, 1, 1, 3, 0,
! 3, 0, 1, 0, 1, 2, 1, 1, 1, 3,
! 2, 3, 4, 3, 2, 2, 1, 4, 3, 4,
! 5, 5, 1, 1, 1, 1, 1, 2, 2, 2,
! 2, 1, 2, 2, 2, 1, 2, 2, 2, 2,
! 1, 2, 1, 1, 1, 1, 2, 0, 0, 0,
! 0, 0, 1, 1, 2, 3, 1, 2, 1, 1,
! 5, 1, 1, 2, 2, 2, 2, 0, 5, 0,
! 4, 0, 0, 1, 2, 3, 3, 3, 0, 4,
! 1, 3, 0, 0, 7, 5, 2, 0, 0, 0,
! 0, 12, 0, 6, 2, 1, 1, 2, 3, 2,
! 2, 2, 3, 6, 8, 10, 12, 3, 4, 1,
! 3, 5, 2, 5, 0, 1, 0, 1, 0, 1,
! 1, 3, 4, 7, 1, 3, 0, 3, 2, 0,
! 0, 6, 2, 0, 1, 1, 3, 1, 3, 4,
! 4, 3, 4, 3, 4, 4, 3, 4, 3, 1,
! 0, 3, 1, 2, 1, 3, 1, 3, 1
};
! /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
! STATE-NUM when YYTABLE doesn't specify something else to do. Zero
! means the default is an error. */
! static const unsigned short yydefact[] =
{
! 4, 0, 6, 0, 1, 0, 0, 267, 299, 298,
! 264, 126, 354, 350, 352, 0, 59, 0, 558, 19,
! 5, 8, 10, 9, 0, 0, 211, 212, 213, 214,
! 203, 204, 205, 206, 215, 216, 217, 218, 207, 208,
! 209, 210, 118, 118, 0, 134, 141, 261, 263, 262,
! 132, 284, 158, 0, 0, 0, 266, 265, 0, 7,
! 17, 18, 355, 351, 353, 0, 0, 0, 349, 259,
! 282, 0, 272, 0, 127, 139, 145, 129, 161, 128,
! 140, 146, 162, 130, 151, 156, 133, 168, 131, 152,
! 157, 169, 135, 137, 143, 142, 179, 136, 138, 144,
! 180, 147, 149, 154, 153, 194, 148, 150, 155, 195,
! 159, 177, 186, 165, 163, 160, 178, 187, 164, 166,
! 192, 201, 172, 170, 167, 193, 202, 171, 173, 175,
! 184, 183, 181, 174, 176, 185, 182, 188, 190, 199,
! 198, 196, 189, 191, 200, 197, 0, 0, 16, 285,
! 32, 33, 375, 366, 375, 367, 364, 368, 12, 86,
! 87, 88, 57, 58, 0, 0, 0, 0, 0, 89,
! 0, 34, 36, 35, 0, 38, 37, 0, 39, 40,
! 0, 0, 41, 60, 0, 0, 62, 44, 46, 0,
! 0, 289, 0, 239, 240, 241, 242, 235, 236, 237,
! 238, 399, 0, 231, 232, 233, 234, 260, 0, 0,
! 283, 13, 282, 31, 0, 282, 259, 0, 282, 348,
! 334, 259, 282, 0, 270, 0, 328, 329, 0, 0,
! 0, 0, 356, 0, 359, 0, 362, 55, 56, 0,
! 0, 0, 50, 47, 0, 463, 0, 0, 49, 0,
! 0, 0, 51, 0, 53, 0, 0, 79, 77, 75,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
! 0, 0, 104, 103, 0, 42, 0, 0, 0, 459,
! 451, 0, 48, 296, 297, 294, 0, 287, 290, 295,
! 268, 401, 269, 347, 0, 0, 119, 0, 550, 345,
! 259, 260, 0, 0, 29, 105, 0, 471, 110, 472,
! 281, 0, 0, 15, 282, 23, 0, 282, 282, 332,
! 14, 27, 0, 282, 382, 377, 231, 232, 233, 234,
! 227, 228, 229, 230, 118, 118, 374, 0, 375, 282,
! 375, 396, 397, 371, 394, 0, 0, 0, 0, 93,
! 92, 0, 11, 45, 0, 0, 84, 85, 0, 0,
! 0, 0, 73, 74, 72, 71, 70, 69, 68, 63,
! 64, 65, 66, 67, 101, 0, 43, 0, 102, 95,
! 0, 0, 452, 453, 94, 0, 289, 42, 259, 282,
! 400, 402, 407, 406, 408, 416, 346, 273, 274, 0,
! 0, 0, 0, 0, 418, 0, 446, 471, 112, 111,
! 0, 279, 333, 0, 0, 21, 278, 331, 25, 358,
! 471, 471, 376, 383, 0, 361, 0, 0, 372, 0,
! 371, 0, 0, 0, 90, 61, 52, 54, 0, 0,
! 78, 76, 96, 100, 556, 0, 462, 431, 461, 471,
! 471, 471, 471, 0, 440, 0, 472, 426, 435, 454,
! 286, 288, 86, 0, 410, 526, 415, 282, 414, 275,
! 0, 554, 534, 223, 224, 219, 220, 225, 226, 221,
! 222, 118, 118, 552, 0, 535, 537, 551, 0, 0,
! 0, 419, 417, 472, 108, 118, 118, 0, 330, 271,
! 274, 471, 276, 471, 378, 384, 472, 380, 386, 472,
! 282, 282, 398, 395, 282, 0, 0, 0, 0, 0,
! 80, 83, 455, 0, 432, 427, 436, 433, 428, 437,
! 472, 429, 438, 434, 430, 439, 441, 448, 449, 291,
! 0, 293, 409, 411, 0, 0, 526, 413, 532, 549,
! 403, 403, 528, 529, 0, 553, 0, 420, 421, 0,
! 115, 0, 116, 0, 303, 301, 300, 280, 472, 0,
! 472, 282, 379, 282, 0, 357, 360, 365, 282, 97,
! 0, 99, 316, 86, 0, 0, 313, 0, 315, 0,
! 369, 306, 312, 0, 0, 0, 557, 449, 460, 267,
! 0, 0, 0, 0, 0, 0, 514, 509, 458, 471,
! 0, 117, 118, 118, 0, 0, 447, 496, 476, 477,
! 0, 0, 412, 527, 339, 259, 282, 282, 335, 336,
! 282, 546, 404, 407, 259, 282, 282, 548, 282, 536,
! 211, 212, 213, 214, 203, 204, 205, 206, 215, 216,
! 217, 218, 207, 208, 209, 210, 118, 118, 538, 555,
! 0, 30, 456, 0, 0, 0, 0, 277, 0, 471,
! 0, 282, 471, 0, 282, 363, 0, 319, 0, 0,
! 310, 91, 0, 305, 0, 318, 309, 81, 0, 512,
! 499, 500, 501, 0, 0, 0, 515, 0, 472, 497,
! 0, 0, 124, 467, 482, 469, 487, 0, 480, 0,
! 0, 450, 464, 125, 292, 410, 526, 544, 282, 338,
! 282, 341, 545, 405, 410, 526, 547, 530, 403, 403,
! 457, 113, 114, 0, 22, 26, 385, 472, 282, 0,
! 388, 387, 282, 0, 391, 98, 0, 321, 0, 0,
! 307, 308, 0, 510, 502, 0, 507, 0, 0, 0,
! 122, 322, 0, 123, 325, 0, 0, 449, 0, 0,
! 0, 466, 471, 465, 486, 0, 498, 342, 343, 0,
! 337, 340, 0, 282, 282, 541, 282, 543, 302, 0,
! 390, 282, 393, 282, 0, 314, 311, 0, 508, 0,
! 282, 120, 0, 121, 0, 0, 0, 0, 516, 0,
! 481, 449, 450, 473, 471, 0, 344, 531, 539, 540,
! 542, 389, 392, 320, 511, 518, 0, 513, 323, 326,
! 0, 0, 470, 517, 495, 488, 0, 492, 479, 475,
! 474, 0, 0, 0, 0, 519, 520, 503, 471, 471,
! 468, 483, 516, 494, 449, 485, 0, 0, 518, 0,
! 0, 472, 472, 449, 0, 493, 0, 0, 0, 504,
! 521, 0, 0, 484, 489, 522, 0, 0, 0, 324,
! 327, 516, 0, 524, 0, 505, 0, 0, 0, 0,
! 490, 523, 506, 525, 449, 491
};
+ /* YYDEFGOTO[NTERM-NUM]. */
static const short yydefgoto[] =
{
! -1, 1, 2, 3, 5, 20, 21, 22, 23, 316,
! 501, 322, 503, 217, 407, 587, 180, 246, 375, 182,
! 183, 184, 185, 24, 186, 187, 361, 360, 358, 595,
! 359, 188, 519, 304, 305, 306, 307, 494, 447, 25,
! 295, 611, 193, 194, 195, 196, 197, 198, 199, 200,
! 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
! 481, 482, 334, 207, 201, 44, 208, 45, 46, 47,
! 48, 49, 223, 71, 218, 224, 569, 72, 497, 296,
! 210, 51, 286, 287, 288, 52, 567, 665, 589, 590,
! 591, 749, 592, 679, 593, 594, 760, 802, 848, 763,
! 804, 849, 500, 226, 627, 628, 629, 227, 53, 54,
! 55, 56, 338, 340, 345, 235, 57, 683, 429, 230,
! 231, 336, 504, 507, 505, 508, 343, 344, 202, 291,
! 390, 631, 632, 392, 393, 394, 219, 448, 449, 450,
! 451, 452, 453, 308, 280, 598, 772, 776, 381, 382,
! 383, 661, 616, 281, 455, 189, 662, 708, 709, 765,
! 710, 767, 309, 410, 812, 773, 813, 814, 711, 811,
! 766, 863, 768, 852, 881, 894, 854, 835, 618, 619,
! 697, 836, 844, 845, 846, 884, 466, 545, 483, 638,
! 782, 484, 485, 658, 486, 550, 299, 400, 487, 488,
! 445, 190
};
+ /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+ STATE-NUM. */
+ #define YYPACT_NINF -735
static const short yypact[] =
{
! 66, 112, 119, 1512, -735, 1512, 221, -735, -735, -735,
! -735, -735, 105, 105, 105, 91, -735, 106, -735, -735,
! -735, -735, -735, -735, 123, 183, 513, 387, 974, 1004,
! 830, 488, 1143, 1677, 1260, 1174, 1293, 1402, 1579, 1764,
! 1681, 1768, -735, -735, 70, -735, -735, -735, -735, -735,
! 105, -735, -735, 88, 110, 157, -735, -735, 1512, -735,
! -735, -735, 105, 105, 105, 2651, 160, 2569, -735, 137,
! 105, 182, -735, 962, -735, -735, -735, 105, -735, -735,
! -735, -735, -735, -735, -735, -735, 105, -735, -735, -735,
! -735, -735, -735, -735, -735, 105, -735, -735, -735, -735,
! -735, -735, -735, -735, 105, -735, -735, -735, -735, -735,
! -735, -735, -735, 105, -735, -735, -735, -735, -735, -735,
! -735, -735, 105, -735, -735, -735, -735, -735, -735, -735,
! -735, 105, -735, -735, -735, -735, -735, -735, -735, -735,
! 105, -735, -735, -735, -735, -735, 222, 183, -735, -735,
! -735, -735, -735, 141, -735, 144, -735, 159, -735, -735,
! -735, -735, -735, -735, 2651, 2651, 208, 219, 277, -735,
! 495, -735, -735, -735, 2651, -735, -735, 1362, -735, -735,
! 2651, 272, 273, -735, 2712, 2753, -735, 3043, 745, 1613,
! 2651, 896, 303, 844, 775, 2521, 2300, 787, 681, 1041,
! 758, -735, 320, 375, 406, 391, 420, -735, 183, 183,
! 105, -735, 105, -735, 416, 105, 274, 455, 105, -735,
! -735, 137, 105, 279, -735, 1056, 98, 448, 318, 1493,
! 403, 738, -735, 405, -735, 590, -735, -735, -735, 2651,
! 2651, 2722, -735, -735, 425, -735, 445, 457, -735, 463,
! 2651, 1362, -735, 1362, -735, 2651, 2651, 506, -735, -735,
! 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
! 2651, 2651, -735, -735, 495, 2651, 2651, 495, 477, -735,
! 531, 501, -735, -735, -735, -735, 350, -735, 505, -735,
! -735, 419, -735, 448, 172, 183, -735, 577, -735, -735,
! 137, 595, 2202, 519, -735, -735, 826, 51, -735, -735,
! 576, 222, 222, -735, 105, -735, 455, 105, 105, -735,
! -735, -735, 455, 105, -735, -735, 844, 775, 2521, 2300,
! 787, 681, 1041, 758, -735, 492, 539, 1829, -735, 105,
! -735, -735, 584, 541, -735, 590, 2876, 2902, 554, -735,
! -735, 2443, -735, 3043, 563, 567, 3043, 3043, 2651, 608,
! 2651, 2651, 2405, 2533, 1298, 1036, 1900, 717, 717, 266,
! 266, -735, -735, -735, -735, 573, 273, 579, -735, -735,
! 495, 1701, 531, -735, -735, 599, 896, 2794, 137, 105,
! -735, -735, -735, -735, 571, -735, -735, -735, 142, 601,
! 1466, 2651, 2651, 2243, -735, 600, -735, -735, -735, -735,
! 1187, -735, 98, 193, 222, -735, 653, -735, -735, -735,
! -735, -735, -735, -735, 614, -735, 616, 2651, 495, 619,
! 541, 2722, 2651, 2722, -735, -735, 627, 627, 662, 2651,
! 3006, 2963, -735, -735, -735, 351, 519, -735, -735, 101,
! 108, 130, 136, 705, -735, 632, -735, -735, -735, -735,
! -735, -735, 365, 636, 419, 419, -735, 105, -735, -735,
! 645, -735, -735, 2088, 1562, 883, 1497, 2118, 2181, 1857,
! 1653, -735, -735, -735, 646, 358, -735, -735, 382, 640,
! 641, -735, -735, -735, -735, 652, 665, 2078, -735, -735,
! 710, -735, -735, -735, 658, -735, -735, 666, -735, -735,
! 105, 105, 3043, -735, 105, 668, 680, 2922, 684, 1195,
! -735, 3059, -735, 495, -735, -735, -735, -735, -735, -735,
! -735, -735, -735, -735, -735, -735, -735, -735, 2313, -735,
! 2651, -735, -735, -735, 701, 602, -735, -735, -735, -735,
! 281, 233, -735, -735, 1431, -735, 783, -735, -735, 64,
! -735, 222, -735, 183, -735, -735, 3043, -735, -735, 2078,
! -735, 105, 586, 105, 330, -735, -735, -735, 105, -735,
! 2651, -735, -735, 750, 495, 2651, -735, 751, 3043, 719,
! 720, -735, -735, 316, 2010, 2651, -735, 2382, -735, 768,
! 2651, 772, 736, 737, 2610, 125, 818, -735, -735, -735,
! 757, -735, -735, -735, 762, 549, 767, -735, -735, -735,
! 2508, 396, -735, -735, -735, 137, 105, 105, 592, 597,
! 197, -735, -735, 105, 137, 105, 197, -735, 105, -735,
! 2088, 1562, 2212, 2422, 883, 1497, 1917, 1741, 2118, 2181,
! 2353, 3039, 1857, 1653, 2149, 1982, -735, -735, -735, -735,
! 764, -735, -735, 446, 462, 1195, 64, -735, 64, -735,
! 2651, 322, -735, 2651, 298, -735, 2944, -735, 2814, 1195,
! -735, -735, 1942, -735, 2141, -735, -735, 3059, 2839, -735,
! -735, -735, -735, 777, 2651, 778, -735, 797, -735, -735,
! 222, 183, -735, -735, -735, -735, -735, 798, 849, 1789,
! 71, -735, -735, -735, -735, 281, 356, -735, 105, -735,
! 105, -735, -735, 105, 233, 233, -735, -735, 281, 233,
! -735, -735, -735, 786, -735, -735, -735, -735, 2981, 2651,
! -735, -735, 2981, 2651, -735, -735, 2651, -735, 788, 2141,
! -735, -735, 2651, -735, -735, 799, -735, 2651, 839, 465,
! -735, 659, 499, -735, 1070, 840, 843, -735, 846, 2651,
! 1877, -735, -735, -735, -735, 2651, -735, 592, 597, 304,
! -735, -735, 602, 105, 197, -735, 197, -735, -735, 586,
! -735, 2981, -735, 2981, 2858, -735, -735, 3025, -735, 50,
! 105, -735, 455, -735, 455, 2651, 2651, 867, 2508, 827,
! -735, -735, -735, -735, -735, 835, -735, -735, -735, -735,
! -735, -735, -735, -735, -735, 72, 836, -735, -735, -735,
! 860, 861, -735, -735, -735, -735, 837, -735, -735, -735,
! -735, 862, 879, 495, 68, 865, -735, -735, -735, -735,
! -735, -735, 2651, -735, -735, -735, 2651, 864, 72, 874,
! 72, -735, -735, -735, 875, -735, 868, 951, 80, -735,
! -735, 764, 764, -735, -735, -735, 895, 954, 880, -735,
! -735, 2651, 2651, -735, 441, -735, 887, 888, 889, 963,
! -735, -735, -735, -735, -735, -735
};
+ /* YYPGOTO[NTERM-NUM]. */
static const short yypgoto[] =
{
! -735, -735, -735, -735, -735, 84, -735, -735, -735, -735,
! -735, -735, -735, -735, -735, 96, -735, -65, 596, -244,
! 489, -735, -735, -735, -106, 863, -735, -735, -735, -735,
! -735, -735, -735, -312, -735, 677, -735, -735, 162, -31,
! -210, -570, -2, 38, 41, 42, 17, 21, 20, 48,
! -373, -371, 431, 432, -337, -330, 438, 440, -461, -453,
! 585, 587, -735, -133, -735, -517, -167, 687, 699, 838,
! 910, -735, -504, -138, -212, 582, -735, 703, -735, 282,
! 2, 58, -735, 613, -735, 283, 435, -735, -260, -735,
! 319, -735, -508, -735, -735, 414, -735, -735, -735, -735,
! -735, -735, -140, 366, 293, 307, -34, -17, -735, -735,
! -735, -735, -735, -735, -735, -735, -735, -735, 593, -64,
! -735, 694, -735, -735, 363, 362, 695, 611, -21, -735,
! -735, -516, -272, -348, -416, -735, 493, -735, -735, -735,
! -735, -735, -735, -218, -735, -735, -451, 229, -735, -735,
! 660, -211, -735, 429, -735, -735, -521, -735, -735, -735,
! -735, -735, -326, -324, 232, -706, 56, 61, -735, -735,
! -735, -735, -735, -735, -735, -735, -735, -735, -735, -735,
! -735, -734, 192, -735, 198, -735, 607, -735, -512, -735,
! -735, -735, -735, -735, -735, 594, -300, -735, -735, -735,
! -735, 59
};
! /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
! positive, shift that token. If negative, reduce the rule which
! number is the opposite. If zero, do what YYDEFACT says.
! If YYTABLE_NINF, parse error. */
! #define YYTABLE_NINF -534
static const short yytable[] =
{
! 181, 26, 192, 26, 415, 50, 225, 50, 73, 228,
! 418, 146, 147, 317, 62, 63, 64, 617, 417, 391,
! 30, 614, 30, 32, 31, 32, 31, 477, 77, 478,
! 86, 376, 95, 623, 104, 637, 113, 477, 122, 478,
! 131, 27, 140, 27, 28, 29, 28, 29, 543, 302,
! 713, 33, -107, 33, 311, 456, 26, 663, 237, 238,
! 50, 807, 58, 479, 58, 660, -2, 203, 243, 50,
! 480, 50, 774, 479, 248, 30, 617, 612, 32, 31,
! 480, 493, 842, 301, 282, 613, 686, 615, 408, 59,
! 233, 150, 151, 656, 506, 509, 27, 825, 335, 28,
! 29, 657, -442, 614, 414, 838, 33, 204, 149, -443,
! 205, 206, 4, 150, 151, 858, 542, 58, 864, -3,
! 149, 149, 149, 456, 456, 530, 456, 877, 150, 151,
! 229, -444, 538, 401, 826, 149, 17, -445, 775, 730,
! 843, -107, 158, 376, 149, 11, 615, 886, 865, 153,
! 155, 157, 859, 149, 608, 148, 247, 873, 65, 612,
! 150, 151, 149, 454, 878, 318, 216, 613, 17, 559,
! 214, 149, 477, 66, 478, 568, 751, 570, 152, 50,
! 149, 648, 572, 649, 694, 574, 68, -422, 895, 149,
! 67, 293, 294, 544, -423, 77, 759, 86, 149, 95,
! 154, 104, 633, 633, 335, 77, 597, 86, 479, 215,
! 216, 377, 785, 787, 203, 480, -424, 652, 50, 203,
! 348, 464, -425, 50, 653, 68, 220, 191, 17, 326,
! 354, 232, 355, 50, 234, 536, 68, 405, 834, 215,
! 216, 796, 69, 50, 666, 435, 668, 156, 330, 236,
! 70, 332, 331, 50, 204, 50, 396, 205, 206, 204,
! 318, 216, 205, 206, 215, 216, 242, 211, 149, 327,
! 817, 212, 328, 329, 424, 239, 426, 498, 398, 333,
! 300, 221, 11, 698, 68, 624, 240, 285, 317, 222,
! 337, 614, 634, 438, 293, 294, 621, 243, 203, 543,
! 635, 216, 50, 420, 421, 17, 60, 61, 543, 78,
! 82, 87, 91, 96, 100, 105, 109, 114, 118, 123,
! 127, 132, 136, 141, 145, 269, 270, 271, 77, 17,
! 86, 342, 95, 68, 104, 326, 489, 490, 204, 50,
! 625, 205, 206, 737, 241, 743, 509, 612, 626, 216,
! 879, 880, 209, 17, 330, 613, 249, 332, 331, 68,
! 684, 669, 250, 672, 313, 215, 216, 542, 314, 739,
! 374, 720, 216, 378, 758, 327, 542, 673, 328, 329,
! 633, 633, 584, 74, 585, 333, 203, 290, 816, 69,
! 50, 7, 8, 9, 10, 79, 337, 70, 473, 83,
! 12, 13, 14, 320, 292, 733, 17, 212, 473, 477,
! 516, 478, 518, 789, 79, 625, 16, 475, 780, 748,
! 781, 476, 17, 626, 216, 664, 204, 475, 88, 205,
! 206, 476, 671, 50, 385, 50, 522, 457, 474, 386,
! 523, 342, 458, 553, 544, 479, 530, 554, 474, 539,
! 549, 549, 480, 544, 540, 734, 303, 735, 715, -471,
! -471, -471, -471, -471, 561, 563, 555, 724, -471, -471,
! -471, 556, -244, 610, 289, 77, 444, 95, 388, 113,
! 714, 131, 285, 297, -471, 250, 389, 216, 530, 323,
! 828, 339, 829, 8, 9, 10, 97, 298, 150, 151,
! 310, 12, 13, 14, 312, 525, 528, 531, 534, 349,
! 526, 529, 532, 535, 282, 215, 216, 7, 8, 9,
! 10, 74, 861, 862, 342, 888, 12, 13, 14, 350,
! 889, 731, 610, 630, 636, 314, 26, 871, 872, 693,
! 50, 351, 16, 473, 17, -106, 398, 732, 352, 317,
! 801, 212, 640, -82, 314, 30, 50, 674, 32, 31,
! 761, 379, 475, 762, 380, 703, 476, 704, 705, 706,
! 707, 644, 387, -248, 646, 645, 27, -381, -381, 28,
! 29, 700, 701, 474, 803, 384, 33, 399, 212, 68,
! 220, 341, 641, 150, 151, 642, 643, 620, -243, 416,
! 298, 402, 647, 470, 406, 419, 7, 8, 9, 10,
! 11, 524, 527, 472, 533, 12, 13, 14, 26, 596,
! 411, 425, 50, 203, 422, 728, 729, 50, 427, 755,
! 428, 16, 203, 670, 609, 723, 50, 30, 467, 216,
! 32, 31, 77, 433, 86, 221, 95, 436, 104, 671,
! 113, 437, 122, 222, 131, 439, 140, 442, 27, 718,
! 216, 28, 29, 204, 720, 216, 205, 206, 33, 289,
! 443, 465, 204, 252, 254, 205, 206, 412, 413, 620,
! 677, 778, 779, 460, 764, 469, -533, 214, 10, 97,
! -274, 492, 799, 609, 12, 13, 14, 502, 293, 294,
! 510, 695, 511, -274, 809, 514, 303, 293, 294, 520,
! 815, 784, 786, 75, 80, 84, 89, 434, 537, 319,
! 541, 111, 116, 120, 125, 76, 81, 85, 90, 548,
! 552, 557, 558, 112, 117, 121, 126, 560, 214, 324,
! 830, 831, 7, 833, -274, 10, 11, 571, -274, 546,
! 562, 12, 13, 14, 578, 573, 78, 82, 96, 100,
! 114, 118, 132, 136, 579, 10, 106, 16, 581, 17,
! 18, 12, 13, 14, 267, 268, 269, 270, 271, 7,
! 473, 149, 10, 79, 395, 622, 659, 833, 12, 13,
! 14, 866, 575, 576, 10, 92, 577, -32, 680, 475,
! 12, 13, 14, 476, 16, 681, 26, 272, 273, 682,
! 50, 274, 275, 276, 277, -33, 833, 887, 17, 689,
! 474, 690, 691, 325, -373, 30, 696, 303, 32, 31,
! -109, -109, -109, -109, -109, 8, 9, 10, 92, -109,
! -109, -109, 699, 12, 13, 14, 27, 702, 7, 28,
! 29, 10, 74, 279, 608, -109, 33, 12, 13, 14,
! 675, 17, 754, 756, 757, 769, 770, 620, 93, 98,
! 102, 107, 788, 16, 795, 17, 129, 134, 138, 143,
! 75, 80, 84, 89, 798, 832, 800, 468, 8, 9,
! 10, 92, 76, 81, 85, 90, 12, 13, 14, 150,
! 151, 8, 9, 283, 284, 319, 319, 805, 716, 717,
! 806, 837, 722, 808, 17, -247, -109, 725, 726, 841,
! 727, 847, 853, 78, 82, 87, 91, 96, 100, 105,
! 109, 114, 118, 123, 127, 132, 136, 141, 145, 857,
! 94, 99, 103, 108, 850, 851, 856, 855, 130, 135,
! 139, 144, 875, 740, 860, 867, 744, 395, 395, 869,
! 874, 876, 882, 213, 883, 885, -28, -28, -28, -28,
! -28, 890, 891, 893, 892, -28, -28, -28, 7, 8,
! 9, 10, 83, 463, 409, 650, 651, 12, 13, 14,
! 214, -28, 654, -274, 655, 495, 499, 496, 397, 461,
! 298, 750, 298, 16, 667, 17, -274, 685, 7, 8,
! 9, 10, 88, 75, 80, 84, 89, 12, 13, 14,
! 790, 783, 777, 515, 792, 76, 81, 85, 90, 215,
! 216, 423, 736, 16, 741, 93, 98, 102, 107, 513,
! 430, 839, 459, 395, 395, 712, 840, -274, 10, 101,
! 868, -274, -28, 0, 12, 13, 14, 315, 870, -245,
! -20, -20, -20, -20, -20, 818, 819, 0, 820, -20,
! -20, -20, 17, 821, 547, 822, 551, 0, 0, 0,
! 0, 0, 827, 0, 214, -20, 0, -274, 0, -246,
! 264, 265, 266, 267, 268, 269, 270, 271, 214, 0,
! -274, -274, 346, 347, 0, 0, 0, 94, 99, 103,
! 108, 0, 0, 353, -274, 0, 0, 0, 356, 357,
! 0, 719, 721, 362, 363, 364, 365, 366, 367, 368,
! 369, 370, 371, 372, 373, 0, 0, 215, 216, 0,
! 0, -274, 0, 0, 0, -274, -20, 0, 8, 9,
! 10, 101, 0, 0, 0, -274, 12, 13, 14, -274,
! 75, 80, 0, 0, 111, 116, 0, 0, 93, 98,
! 102, 107, 76, 81, 17, 0, 112, 117, 7, 8,
! 9, 10, 115, 0, 0, 0, 0, 12, 13, 14,
! 0, 7, 8, 9, 10, 11, 582, 0, 583, 151,
! 12, 13, 14, 16, 160, 161, 0, 162, 395, 395,
! 0, 0, 0, 0, 0, 0, 16, 395, 395, 0,
! 0, 395, 395, 440, 441, 163, 0, 18, -249, 164,
! 165, 166, 167, 168, 0, 0, 0, 0, 169, 0,
! 94, 99, 103, 108, 170, 0, 0, 171, 0, 0,
! 0, 0, 172, 173, 174, 0, 0, 175, 176, -252,
! 0, 584, 177, 585, 7, 8, 9, 10, 110, 0,
! 719, 721, 721, 12, 13, 14, 0, 0, 0, 0,
! 0, -304, 178, 179, 0, 586, 0, 0, 0, 16,
! 512, 17, 0, 0, 0, 517, 0, 7, 8, 9,
! 10, 119, 521, 0, 0, 0, 12, 13, 14, 0,
! 0, 0, 0, 93, 98, 0, 0, 129, 134, 0,
! 0, 0, 16, 0, 17, 0, 0, 75, 80, 84,
! 89, 0, 0, 0, 0, 111, 116, 120, 125, 76,
! 81, 85, 90, 0, 0, -251, 0, 112, 117, 121,
! 126, 263, 264, 265, 266, 267, 268, 269, 270, 271,
! 566, 0, 0, 244, 0, 159, 7, 0, 0, 10,
! 11, 160, 161, 0, 162, 12, 13, 14, -253, 0,
! 0, 0, 588, 0, 0, 94, 99, 0, 0, 130,
! 135, 16, 163, 17, 18, 0, 164, 165, 166, 167,
! 168, 0, 0, 0, 0, 169, 7, 8, 9, 10,
! 124, 170, 0, 0, 171, 12, 13, 14, 0, 172,
! 173, 174, 0, 0, 175, 176, 0, 0, 0, 177,
! 0, 16, 566, 0, 0, 7, 8, 9, 10, 11,
! 0, 0, 639, 676, 12, 13, 14, 0, 678, 178,
! 179, 0, 245, 0, 0, 0, 0, 588, 687, 0,
! 16, 0, 17, 688, 0, 0, 0, 470, 0, 471,
! 7, 8, 9, 10, 11, 0, 0, 472, 0, 12,
! 13, 14, 93, 98, 102, 107, 0, -254, 0, 0,
! 129, 134, 138, 143, 321, 16, 0, -24, -24, -24,
! -24, -24, 8, 9, 10, 97, -24, -24, -24, 0,
! 12, 13, 14, 6, 0, -118, 7, 8, 9, 10,
! 11, 214, -24, 0, -274, 12, 13, 14, 588, 0,
! 0, 0, 0, 738, 0, 0, 742, -274, 0, 0,
! 15, 16, 588, 17, 18, 588, 0, 588, 0, 0,
! -533, 0, 0, 0, 94, 99, 103, 108, 0, 0,
! 215, 216, 130, 135, 139, 144, 7, 8, 9, 10,
! 79, -118, 0, 0, 0, 12, 13, 14, -274, -118,
! 0, 0, -274, -24, 8, 9, 10, 128, 0, 0,
! 0, 16, 12, 13, 14, 0, 0, 19, 0, 0,
! 0, 0, 791, 0, 0, 0, 793, 0, 0, 794,
! 17, 0, 588, 0, 278, 797, -447, -447, -447, -447,
! -447, -447, -447, -447, 0, -447, -447, -447, -447, -447,
! 0, -447, -447, -447, -447, -447, -447, -447, -447, -447,
! -447, -447, -447, -447, -447, -447, -447, -447, -447, -447,
! -447, -447, 0, 0, 0, 0, -447, 0, 8, 9,
! 10, 133, -447, 0, -255, -447, 12, 13, 14, 0,
! -447, -447, -447, 0, 0, -447, -447, 0, 0, 0,
! -447, 0, 8, 9, 10, 106, 8, 9, 10, 137,
! 12, 13, 14, 0, 12, 13, 14, 0, -447, 279,
! -447, -447, 446, -447, -471, -471, -471, -471, -471, -471,
! -471, -471, 17, -471, -471, -471, -471, -471, 0, -471,
! -471, -471, -471, -471, -471, -471, -471, -471, -471, -471,
! -471, -471, -471, -471, 0, -471, -471, -471, -471, -471,
! 0, 0, 0, 0, -471, 0, 8, 9, 10, 106,
! -471, 0, 0, -471, 12, 13, 14, 0, -471, -471,
! -471, 0, -250, -471, -471, 0, -257, 0, -471, 8,
! 9, 10, 133, 8, 9, 10, 142, 12, 13, 14,
! 0, 12, 13, 14, 0, 0, -471, 0, -471, -471,
! 771, -471, -449, -449, 0, 0, 0, 0, -449, -449,
! 0, -449, 0, 0, 0, -449, 0, -449, -449, -449,
! -449, -449, -449, -449, -449, -449, -449, -449, 0, -449,
! 0, -449, 0, -449, -449, -449, -449, -449, 0, 0,
! 324, 0, -449, 7, 0, 0, 10, 11, -449, 0,
! 0, -449, 12, 13, 14, 0, -449, -449, -449, -256,
! 0, -449, -449, -258, 0, 0, -449, 0, 16, 0,
! 17, 18, 8, 9, 10, 128, 0, 0, 0, 0,
! 12, 13, 14, 0, -449, 0, -449, -449, 810, -449,
! -478, -478, 0, 0, 0, 0, -478, -478, 17, -478,
! 0, 0, 0, -478, 0, -478, -478, -478, -478, -478,
! -478, -478, -478, -478, -478, -478, 0, -478, 0, -478,
! 0, -478, -478, -478, -478, -478, 0, 0, 0, 0,
! -478, 0, 8, 9, 10, 101, -478, 0, 0, -478,
! 12, 13, 14, 0, -478, -478, -478, 0, 0, -478,
! -478, 0, 0, 582, -478, 583, 151, 0, 17, 0,
! 0, 160, 161, 0, 162, 265, 266, 267, 268, 269,
! 270, 271, -478, 0, -478, -478, 0, -478, 0, 0,
! 0, 0, 163, 0, 18, 0, 164, 165, 166, 167,
! 168, 0, 0, 0, 0, 169, 0, 8, 9, 10,
! 142, 170, 0, 0, 171, 12, 13, 14, 0, 172,
! 173, 174, 0, 0, 175, 176, 0, 0, 584, 177,
! 585, 582, 0, 159, 0, 0, 0, 0, 0, 160,
! 161, 0, 162, 0, 0, 0, 0, 0, -370, 178,
! 179, 0, 586, 0, 0, 0, 0, 0, 0, 0,
! 163, 0, 18, 0, 164, 165, 166, 167, 168, 0,
! 0, 0, 0, 169, -317, 0, 0, 0, 0, 170,
! 0, 0, 171, 0, 0, 0, 0, 172, 173, 174,
! 0, 0, 175, 176, 0, 0, -317, 177, -317, 564,
! 0, 159, 0, 0, 0, 0, 0, 160, 161, 0,
! 162, 0, 7, 8, 9, 10, 74, 178, 179, 0,
! 586, 12, 13, 14, 0, 0, 0, 0, 163, 0,
! 18, 0, 164, 165, 166, 167, 168, 16, 0, 17,
! 0, 169, 7, 8, 9, 10, 110, 170, 0, 0,
! 171, 12, 13, 14, 0, 172, 173, 174, 0, 0,
! 175, 176, 582, 0, 159, 177, 0, 16, 0, 17,
! 160, 161, 0, 162, 8, 9, 10, 137, 0, 0,
! 0, 0, 12, 13, 14, 178, 179, 0, 565, 0,
! 0, 163, 0, 18, 0, 164, 165, 166, 167, 168,
! 17, 0, 0, 0, 169, 7, 8, 9, 10, 115,
! 170, 0, 0, 171, 12, 13, 14, 0, 172, 173,
! 174, 0, 0, 175, 176, 159, 0, 0, 177, 0,
! 16, 160, 161, 0, 162, 0, 7, 8, 9, 10,
! 83, 0, 0, 0, 0, 12, 13, 14, 178, 179,
! 0, 586, 163, 0, 18, 0, 164, 165, 166, 167,
! 168, 16, 0, 17, 0, 169, 159, 0, 0, 0,
! 0, 170, 160, 161, 171, 162, 0, 0, 0, 172,
! 173, 403, 0, 0, 175, 176, 0, 0, 0, 177,
! 0, 0, 0, 163, 0, 18, 0, 164, 165, 166,
! 167, 168, 0, 0, 0, 0, 169, 0, 0, 178,
! 179, 0, 170, 404, 0, 171, 0, 0, 0, 0,
! 172, 173, 174, 0, 7, 175, 176, 10, 88, 0,
! 177, 0, 0, 12, 13, 14, 583, 599, 8, 9,
! 10, 11, 160, 161, 0, 162, 12, 13, 14, 16,
! 178, 179, 0, 0, 491, 600, 601, 602, 603, 604,
! 605, 606, 16, 163, 17, 18, 0, 164, 165, 166,
! 167, 168, 0, 0, 0, 0, 169, 7, 8, 9,
! 10, 119, 170, 0, 0, 171, 12, 13, 14, 0,
! 172, 173, 174, 0, 0, 175, 176, 0, 0, 0,
! 177, 0, 16, 0, 17, 583, 151, 0, 0, 0,
! 0, 160, 161, 0, 162, 0, 0, 0, 607, 0,
! 178, 179, 0, 608, 600, 601, 602, 603, 604, 605,
! 606, 0, 163, 0, 18, 0, 164, 165, 166, 167,
! 168, 0, 0, 0, 0, 169, 7, 8, 9, 10,
! 88, 170, 0, 0, 171, 12, 13, 14, 0, 172,
! 173, 174, 0, 0, 175, 176, 159, 0, 0, 177,
! 0, 16, 160, 161, 0, 162, 261, 262, 263, 264,
! 265, 266, 267, 268, 269, 270, 271, 607, 0, 178,
! 179, 0, 608, 163, 0, 18, 0, 164, 165, 166,
! 167, 168, 0, 0, 0, 0, 169, 0, 0, 0,
! 0, 0, 170, 0, 0, 171, 0, 0, 0, 0,
! 172, 173, 174, 0, 0, 175, 176, 0, 0, 0,
! 177, 159, 7, 8, 9, 10, 11, 160, 161, 0,
! 162, 12, 13, 14, 0, 7, 0, 0, 10, 83,
! 178, 179, 0, 434, 12, 13, 14, 16, 163, 17,
! 18, 0, 164, 165, 166, 167, 168, 0, 0, 0,
! 16, 169, 17, 0, 0, 0, 0, 170, 0, 0,
! 171, 0, 0, 0, 0, 172, 173, 174, 0, 0,
! 175, 176, 159, 7, 0, 177, 10, 11, 160, 161,
! 0, 162, 12, 13, 14, 262, 263, 264, 265, 266,
! 267, 268, 269, 270, 271, 178, 179, 0, 16, 163,
! 17, 18, 0, 164, 165, 166, 167, 168, 0, 0,
! 0, 0, 169, 159, 0, 0, 0, 0, 170, 160,
! 161, 171, 162, 0, 0, 0, 172, 173, 174, 0,
! 0, 175, 176, 0, 0, 0, 177, 0, 0, 0,
! 163, 0, 18, 0, 164, 165, 166, 167, 168, 0,
! 0, 0, 0, 169, 159, 0, 178, 179, 0, 170,
! 160, 161, 171, 162, 0, 0, 0, 172, 173, 174,
! 0, 0, 175, 176, 0, 0, 0, 177, 0, 0,
! 0, 163, 0, 18, 0, 164, 165, 166, 167, 168,
! 0, 0, 0, 0, 169, 692, 0, 178, 179, 0,
! 170, 0, 0, 171, 0, 0, 0, 0, 172, 173,
! 174, 0, 0, 175, 176, 159, 0, 0, 177, 0,
! 0, 160, 161, 0, 162, 0, 7, 0, 0, 10,
! 11, 0, 0, 0, 0, 12, 13, 14, 178, 179,
! 0, 0, 163, 0, 18, 0, 164, 165, 166, 167,
! 168, 16, 0, 17, 0, 169, 159, 0, 0, 0,
! 0, 170, 160, 161, 171, 162, 0, 0, 0, 172,
! 173, 174, 0, 0, 175, 176, 0, 0, 0, 251,
! 0, 0, 0, 163, 0, 18, 0, 164, 165, 166,
! 167, 168, 0, 0, 0, 0, 169, 462, 0, 178,
! 179, 0, 170, 160, 161, 171, 162, 0, 0, 0,
! 172, 173, 174, 0, 0, 175, 176, 0, 0, 0,
! 253, 0, 0, 0, 163, 746, 18, 0, 164, 165,
! 166, 167, 168, 0, 0, 0, 0, 169, 0, 0,
! 178, 179, 0, 170, 0, 0, 171, 0, 0, 0,
! 752, 172, 173, 174, 0, 0, 175, 176, 255, 256,
! 257, 177, 258, 259, 260, 261, 262, 263, 264, 265,
! 266, 267, 268, 269, 270, 271, 0, 0, 0, 0,
! 0, 178, 179, 255, 256, 257, 753, 258, 259, 260,
! 261, 262, 263, 264, 265, 266, 267, 268, 269, 270,
! 271, 0, 255, 256, 257, 747, 258, 259, 260, 261,
! 262, 263, 264, 265, 266, 267, 268, 269, 270, 271,
! 255, 256, 257, 0, 258, 259, 260, 261, 262, 263,
! 264, 265, 266, 267, 268, 269, 270, 271, 0, 0,
! 0, 0, 0, 0, 0, 0, 255, 256, 257, 823,
258, 259, 260, 261, 262, 263, 264, 265, 266, 267,
! 268, 269, 270, 271, 0, 431, 255, 256, 257, 0,
! 258, 259, 260, 261, 262, 263, 264, 265, 266, 267,
! 268, 269, 270, 271, 0, 0, 0, 0, 255, 256,
! 257, 432, 258, 259, 260, 261, 262, 263, 264, 265,
! 266, 267, 268, 269, 270, 271, 0, 0, 0, 0,
! 0, 580, 17, 260, 261, 262, 263, 264, 265, 266,
! 267, 268, 269, 270, 271, 255, 256, 257, 745, 258,
! 259, 260, 261, 262, 263, 264, 265, 266, 267, 268,
! 269, 270, 271, 7, 8, 9, 10, 124, 0, 0,
! 0, 0, 12, 13, 14, 259, 260, 261, 262, 263,
! 264, 265, 266, 267, 268, 269, 270, 271, 16, 255,
! 256, 257, 824, 258, 259, 260, 261, 262, 263, 264,
! 265, 266, 267, 268, 269, 270, 271, 255, 256, 257,
! 0, 258, 259, 260, 261, 262, 263, 264, 265, 266,
! 267, 268, 269, 270, 271, 257, 0, 258, 259, 260,
! 261, 262, 263, 264, 265, 266, 267, 268, 269, 270,
! 271
};
static const short yycheck[] =
{
! 65, 3, 67, 5, 316, 3, 146, 5, 25, 147,
! 322, 42, 43, 225, 12, 13, 14, 538, 318, 291,
! 3, 538, 5, 3, 3, 5, 5, 400, 26, 400,
! 28, 275, 30, 545, 32, 551, 34, 410, 36, 410,
! 38, 3, 40, 5, 3, 3, 5, 5, 464, 216,
! 620, 3, 1, 5, 221, 381, 58, 561, 164, 165,
! 58, 767, 3, 400, 5, 1, 0, 69, 174, 67,
! 400, 69, 1, 410, 180, 58, 597, 538, 58, 58,
! 410, 407, 10, 216, 190, 538, 594, 538, 306, 5,
! 154, 3, 4, 554, 420, 421, 58, 47, 231, 58,
! 58, 554, 1, 620, 314, 811, 58, 69, 50, 1,
! 69, 69, 0, 3, 4, 47, 464, 58, 852, 0,
! 62, 63, 64, 449, 450, 451, 452, 47, 3, 4,
! 147, 1, 456, 300, 84, 77, 31, 1, 67, 660,
! 68, 90, 58, 387, 86, 8, 597, 881, 854, 53,
! 54, 55, 84, 95, 90, 85, 177, 863, 67, 620,
! 3, 4, 104, 381, 84, 67, 68, 620, 31, 493,
! 28, 113, 545, 67, 545, 501, 684, 503, 90, 177,
! 122, 554, 506, 554, 59, 509, 3, 86, 894, 131,
! 67, 208, 209, 465, 86, 193, 700, 195, 140, 197,
! 90, 199, 550, 551, 337, 203, 530, 205, 545, 67,
! 68, 276, 728, 729, 216, 545, 86, 554, 216, 221,
! 241, 388, 86, 221, 554, 3, 4, 67, 31, 231,
! 251, 90, 253, 231, 90, 453, 3, 302, 808, 67,
! 68, 749, 59, 241, 568, 351, 570, 90, 231, 90,
! 67, 231, 231, 251, 216, 253, 84, 216, 216, 221,
! 67, 68, 221, 221, 67, 68, 170, 85, 210, 231,
! 782, 89, 231, 231, 338, 67, 340, 84, 295, 231,
! 6, 59, 8, 609, 3, 4, 67, 191, 500, 67,
! 231, 808, 59, 358, 311, 312, 540, 403, 300, 715,
! 67, 68, 300, 334, 335, 31, 85, 86, 724, 26,
! 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
! 37, 38, 39, 40, 41, 59, 60, 61, 326, 31,
! 328, 235, 330, 3, 332, 337, 401, 402, 300, 337,
! 59, 300, 300, 669, 67, 47, 672, 808, 67, 68,
! 871, 872, 70, 31, 337, 808, 84, 337, 337, 3,
! 44, 571, 89, 573, 85, 67, 68, 715, 89, 47,
! 274, 67, 68, 277, 698, 337, 724, 47, 337, 337,
! 728, 729, 66, 8, 68, 337, 388, 84, 84, 59,
! 388, 4, 5, 6, 7, 8, 337, 67, 400, 8,
! 13, 14, 15, 85, 84, 665, 31, 89, 410, 782,
! 431, 782, 433, 737, 8, 59, 29, 400, 718, 679,
! 720, 400, 31, 67, 68, 563, 388, 410, 8, 388,
! 388, 410, 572, 431, 84, 433, 85, 381, 400, 89,
! 89, 345, 381, 85, 716, 782, 772, 89, 410, 84,
! 481, 482, 782, 725, 89, 666, 1, 668, 625, 4,
! 5, 6, 7, 8, 495, 496, 84, 634, 13, 14,
! 15, 89, 85, 538, 191, 473, 380, 475, 59, 477,
! 84, 479, 386, 67, 29, 89, 67, 68, 814, 86,
! 802, 86, 804, 5, 6, 7, 8, 215, 3, 4,
! 218, 13, 14, 15, 222, 449, 450, 451, 452, 84,
! 449, 450, 451, 452, 620, 67, 68, 4, 5, 6,
! 7, 8, 848, 849, 428, 84, 13, 14, 15, 84,
! 89, 85, 597, 550, 551, 89, 538, 861, 862, 604,
! 538, 84, 29, 545, 31, 90, 563, 85, 85, 761,
! 85, 89, 554, 47, 89, 538, 554, 574, 538, 538,
! 700, 84, 545, 701, 33, 16, 545, 18, 19, 20,
! 21, 554, 67, 85, 554, 554, 538, 85, 86, 538,
! 538, 612, 613, 545, 85, 84, 538, 10, 89, 3,
! 4, 1, 554, 3, 4, 554, 554, 538, 85, 317,
! 318, 6, 554, 1, 85, 323, 4, 5, 6, 7,
! 8, 449, 450, 11, 452, 13, 14, 15, 620, 523,
! 44, 339, 620, 625, 85, 656, 657, 625, 44, 694,
! 89, 29, 634, 47, 538, 633, 634, 620, 67, 68,
! 620, 620, 640, 89, 642, 59, 644, 84, 646, 789,
! 648, 84, 650, 67, 652, 47, 654, 84, 620, 67,
! 68, 620, 620, 625, 67, 68, 625, 625, 620, 386,
! 91, 389, 634, 184, 185, 634, 634, 311, 312, 620,
! 584, 715, 716, 84, 701, 84, 84, 28, 7, 8,
! 31, 91, 757, 597, 13, 14, 15, 44, 715, 716,
! 86, 605, 86, 44, 769, 86, 1, 724, 725, 47,
! 775, 728, 729, 26, 27, 28, 29, 90, 86, 226,
! 84, 34, 35, 36, 37, 26, 27, 28, 29, 84,
! 84, 91, 91, 34, 35, 36, 37, 85, 28, 1,
! 805, 806, 4, 808, 85, 7, 8, 89, 89, 467,
! 85, 13, 14, 15, 86, 89, 473, 474, 475, 476,
! 477, 478, 479, 480, 84, 7, 8, 29, 84, 31,
! 32, 13, 14, 15, 57, 58, 59, 60, 61, 4,
! 782, 723, 7, 8, 291, 84, 3, 852, 13, 14,
! 15, 856, 510, 511, 7, 8, 514, 47, 47, 782,
! 13, 14, 15, 782, 29, 86, 808, 62, 63, 89,
! 808, 66, 67, 68, 69, 47, 881, 882, 31, 47,
! 782, 85, 85, 85, 86, 808, 8, 1, 808, 808,
! 4, 5, 6, 7, 8, 5, 6, 7, 8, 13,
! 14, 15, 85, 13, 14, 15, 808, 85, 4, 808,
! 808, 7, 8, 86, 90, 29, 808, 13, 14, 15,
! 578, 31, 85, 85, 67, 67, 17, 808, 30, 31,
! 32, 33, 86, 29, 86, 31, 38, 39, 40, 41,
! 193, 194, 195, 196, 85, 18, 47, 394, 5, 6,
! 7, 8, 193, 194, 195, 196, 13, 14, 15, 3,
! 4, 5, 6, 7, 8, 412, 413, 67, 626, 627,
! 67, 84, 630, 67, 31, 85, 90, 635, 636, 84,
! 638, 85, 85, 640, 641, 642, 643, 644, 645, 646,
! 647, 648, 649, 650, 651, 652, 653, 654, 655, 843,
! 30, 31, 32, 33, 84, 84, 67, 85, 38, 39,
! 40, 41, 84, 671, 89, 91, 674, 464, 465, 85,
! 85, 10, 67, 1, 10, 85, 4, 5, 6, 7,
! 8, 84, 84, 10, 85, 13, 14, 15, 4, 5,
! 6, 7, 8, 387, 307, 554, 554, 13, 14, 15,
! 28, 29, 554, 31, 554, 410, 414, 410, 295, 386,
! 718, 682, 720, 29, 569, 31, 44, 593, 4, 5,
! 6, 7, 8, 326, 327, 328, 329, 13, 14, 15,
! 738, 728, 715, 430, 742, 326, 327, 328, 329, 67,
! 68, 337, 669, 29, 672, 197, 198, 199, 200, 428,
! 345, 812, 382, 550, 551, 616, 814, 85, 7, 8,
! 858, 89, 90, -1, 13, 14, 15, 1, 860, 85,
! 4, 5, 6, 7, 8, 783, 784, -1, 786, 13,
! 14, 15, 31, 791, 467, 793, 482, -1, -1, -1,
! -1, -1, 800, -1, 28, 29, -1, 31, -1, 85,
! 54, 55, 56, 57, 58, 59, 60, 61, 28, -1,
! 44, 31, 239, 240, -1, -1, -1, 197, 198, 199,
! 200, -1, -1, 250, 44, -1, -1, -1, 255, 256,
! -1, 628, 629, 260, 261, 262, 263, 264, 265, 266,
! 267, 268, 269, 270, 271, -1, -1, 67, 68, -1,
! -1, 85, -1, -1, -1, 89, 90, -1, 5, 6,
! 7, 8, -1, -1, -1, 85, 13, 14, 15, 89,
! 473, 474, -1, -1, 477, 478, -1, -1, 330, 331,
! 332, 333, 473, 474, 31, -1, 477, 478, 4, 5,
! 6, 7, 8, -1, -1, -1, -1, 13, 14, 15,
! -1, 4, 5, 6, 7, 8, 1, -1, 3, 4,
! 13, 14, 15, 29, 9, 10, -1, 12, 715, 716,
! -1, -1, -1, -1, -1, -1, 29, 724, 725, -1,
! -1, 728, 729, 360, 361, 30, -1, 32, 85, 34,
! 35, 36, 37, 38, -1, -1, -1, -1, 43, -1,
! 330, 331, 332, 333, 49, -1, -1, 52, -1, -1,
! -1, -1, 57, 58, 59, -1, -1, 62, 63, 85,
! -1, 66, 67, 68, 4, 5, 6, 7, 8, -1,
! 777, 778, 779, 13, 14, 15, -1, -1, -1, -1,
! -1, 86, 87, 88, -1, 90, -1, -1, -1, 29,
! 427, 31, -1, -1, -1, 432, -1, 4, 5, 6,
! 7, 8, 439, -1, -1, -1, 13, 14, 15, -1,
! -1, -1, -1, 475, 476, -1, -1, 479, 480, -1,
! -1, -1, 29, -1, 31, -1, -1, 640, 641, 642,
! 643, -1, -1, -1, -1, 648, 649, 650, 651, 640,
! 641, 642, 643, -1, -1, 85, -1, 648, 649, 650,
! 651, 53, 54, 55, 56, 57, 58, 59, 60, 61,
! 497, -1, -1, 1, -1, 3, 4, -1, -1, 7,
! 8, 9, 10, -1, 12, 13, 14, 15, 85, -1,
! -1, -1, 519, -1, -1, 475, 476, -1, -1, 479,
! 480, 29, 30, 31, 32, -1, 34, 35, 36, 37,
! 38, -1, -1, -1, -1, 43, 4, 5, 6, 7,
8, 49, -1, -1, 52, 13, 14, 15, -1, 57,
! 58, 59, -1, -1, 62, 63, -1, -1, -1, 67,
! -1, 29, 569, -1, -1, 4, 5, 6, 7, 8,
! -1, -1, 11, 580, 13, 14, 15, -1, 585, 87,
! 88, -1, 90, -1, -1, -1, -1, 594, 595, -1,
! 29, -1, 31, 600, -1, -1, -1, 1, -1, 3,
! 4, 5, 6, 7, 8, -1, -1, 11, -1, 13,
! 14, 15, 644, 645, 646, 647, -1, 85, -1, -1,
! 652, 653, 654, 655, 1, 29, -1, 4, 5, 6,
! 7, 8, 5, 6, 7, 8, 13, 14, 15, -1,
! 13, 14, 15, 1, -1, 3, 4, 5, 6, 7,
! 8, 28, 29, -1, 31, 13, 14, 15, 665, -1,
! -1, -1, -1, 670, -1, -1, 673, 44, -1, -1,
! 28, 29, 679, 31, 32, 682, -1, 684, -1, -1,
! 84, -1, -1, -1, 644, 645, 646, 647, -1, -1,
! 67, 68, 652, 653, 654, 655, 4, 5, 6, 7,
! 8, 59, -1, -1, -1, 13, 14, 15, 85, 67,
! -1, -1, 89, 90, 5, 6, 7, 8, -1, -1,
! -1, 29, 13, 14, 15, -1, -1, 85, -1, -1,
! -1, -1, 739, -1, -1, -1, 743, -1, -1, 746,
! 31, -1, 749, -1, 1, 752, 3, 4, 5, 6,
! 7, 8, 9, 10, -1, 12, 13, 14, 15, 16,
! -1, 18, 19, 20, 21, 22, 23, 24, 25, 26,
! 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
! 37, 38, -1, -1, -1, -1, 43, -1, 5, 6,
! 7, 8, 49, -1, 85, 52, 13, 14, 15, -1,
! 57, 58, 59, -1, -1, 62, 63, -1, -1, -1,
! 67, -1, 5, 6, 7, 8, 5, 6, 7, 8,
! 13, 14, 15, -1, 13, 14, 15, -1, 85, 86,
! 87, 88, 1, 90, 3, 4, 5, 6, 7, 8,
! 9, 10, 31, 12, 13, 14, 15, 16, -1, 18,
! 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
! 29, 30, 31, 32, -1, 34, 35, 36, 37, 38,
! -1, -1, -1, -1, 43, -1, 5, 6, 7, 8,
! 49, -1, -1, 52, 13, 14, 15, -1, 57, 58,
! 59, -1, 85, 62, 63, -1, 85, -1, 67, 5,
! 6, 7, 8, 5, 6, 7, 8, 13, 14, 15,
! -1, 13, 14, 15, -1, -1, 85, -1, 87, 88,
! 1, 90, 3, 4, -1, -1, -1, -1, 9, 10,
! -1, 12, -1, -1, -1, 16, -1, 18, 19, 20,
! 21, 22, 23, 24, 25, 26, 27, 28, -1, 30,
! -1, 32, -1, 34, 35, 36, 37, 38, -1, -1,
! 1, -1, 43, 4, -1, -1, 7, 8, 49, -1,
! -1, 52, 13, 14, 15, -1, 57, 58, 59, 85,
! -1, 62, 63, 85, -1, -1, 67, -1, 29, -1,
! 31, 32, 5, 6, 7, 8, -1, -1, -1, -1,
! 13, 14, 15, -1, 85, -1, 87, 88, 1, 90,
! 3, 4, -1, -1, -1, -1, 9, 10, 31, 12,
! -1, -1, -1, 16, -1, 18, 19, 20, 21, 22,
! 23, 24, 25, 26, 27, 28, -1, 30, -1, 32,
-1, 34, 35, 36, 37, 38, -1, -1, -1, -1,
! 43, -1, 5, 6, 7, 8, 49, -1, -1, 52,
! 13, 14, 15, -1, 57, 58, 59, -1, -1, 62,
! 63, -1, -1, 1, 67, 3, 4, -1, 31, -1,
! -1, 9, 10, -1, 12, 55, 56, 57, 58, 59,
! 60, 61, 85, -1, 87, 88, -1, 90, -1, -1,
! -1, -1, 30, -1, 32, -1, 34, 35, 36, 37,
! 38, -1, -1, -1, -1, 43, -1, 5, 6, 7,
! 8, 49, -1, -1, 52, 13, 14, 15, -1, 57,
! 58, 59, -1, -1, 62, 63, -1, -1, 66, 67,
! 68, 1, -1, 3, -1, -1, -1, -1, -1, 9,
! 10, -1, 12, -1, -1, -1, -1, -1, 86, 87,
! 88, -1, 90, -1, -1, -1, -1, -1, -1, -1,
30, -1, 32, -1, 34, 35, 36, 37, 38, -1,
! -1, -1, -1, 43, 44, -1, -1, -1, -1, 49,
! -1, -1, 52, -1, -1, -1, -1, 57, 58, 59,
! -1, -1, 62, 63, -1, -1, 66, 67, 68, 1,
! -1, 3, -1, -1, -1, -1, -1, 9, 10, -1,
! 12, -1, 4, 5, 6, 7, 8, 87, 88, -1,
! 90, 13, 14, 15, -1, -1, -1, -1, 30, -1,
! 32, -1, 34, 35, 36, 37, 38, 29, -1, 31,
! -1, 43, 4, 5, 6, 7, 8, 49, -1, -1,
! 52, 13, 14, 15, -1, 57, 58, 59, -1, -1,
! 62, 63, 1, -1, 3, 67, -1, 29, -1, 31,
! 9, 10, -1, 12, 5, 6, 7, 8, -1, -1,
! -1, -1, 13, 14, 15, 87, 88, -1, 90, -1,
! -1, 30, -1, 32, -1, 34, 35, 36, 37, 38,
! 31, -1, -1, -1, 43, 4, 5, 6, 7, 8,
! 49, -1, -1, 52, 13, 14, 15, -1, 57, 58,
! 59, -1, -1, 62, 63, 3, -1, -1, 67, -1,
! 29, 9, 10, -1, 12, -1, 4, 5, 6, 7,
! 8, -1, -1, -1, -1, 13, 14, 15, 87, 88,
! -1, 90, 30, -1, 32, -1, 34, 35, 36, 37,
! 38, 29, -1, 31, -1, 43, 3, -1, -1, -1,
-1, 49, 9, 10, 52, 12, -1, -1, -1, 57,
! 58, 59, -1, -1, 62, 63, -1, -1, -1, 67,
! -1, -1, -1, 30, -1, 32, -1, 34, 35, 36,
37, 38, -1, -1, -1, -1, 43, -1, -1, 87,
88, -1, 49, 91, -1, 52, -1, -1, -1, -1,
! 57, 58, 59, -1, 4, 62, 63, 7, 8, -1,
! 67, -1, -1, 13, 14, 15, 3, 4, 5, 6,
! 7, 8, 9, 10, -1, 12, 13, 14, 15, 29,
87, 88, -1, -1, 91, 22, 23, 24, 25, 26,
27, 28, 29, 30, 31, 32, -1, 34, 35, 36,
37, 38, -1, -1, -1, -1, 43, 4, 5, 6,
7, 8, 49, -1, -1, 52, 13, 14, 15, -1,
! 57, 58, 59, -1, -1, 62, 63, -1, -1, -1,
! 67, -1, 29, -1, 31, 3, 4, -1, -1, -1,
-1, 9, 10, -1, 12, -1, -1, -1, 85, -1,
87, 88, -1, 90, 22, 23, 24, 25, 26, 27,
28, -1, 30, -1, 32, -1, 34, 35, 36, 37,
! 38, -1, -1, -1, -1, 43, 4, 5, 6, 7,
! 8, 49, -1, -1, 52, 13, 14, 15, -1, 57,
! 58, 59, -1, -1, 62, 63, 3, -1, -1, 67,
! -1, 29, 9, 10, -1, 12, 51, 52, 53, 54,
! 55, 56, 57, 58, 59, 60, 61, 85, -1, 87,
! 88, -1, 90, 30, -1, 32, -1, 34, 35, 36,
! 37, 38, -1, -1, -1, -1, 43, -1, -1, -1,
! -1, -1, 49, -1, -1, 52, -1, -1, -1, -1,
! 57, 58, 59, -1, -1, 62, 63, -1, -1, -1,
! 67, 3, 4, 5, 6, 7, 8, 9, 10, -1,
! 12, 13, 14, 15, -1, 4, -1, -1, 7, 8,
! 87, 88, -1, 90, 13, 14, 15, 29, 30, 31,
! 32, -1, 34, 35, 36, 37, 38, -1, -1, -1,
! 29, 43, 31, -1, -1, -1, -1, 49, -1, -1,
! 52, -1, -1, -1, -1, 57, 58, 59, -1, -1,
! 62, 63, 3, 4, -1, 67, 7, 8, 9, 10,
! -1, 12, 13, 14, 15, 52, 53, 54, 55, 56,
! 57, 58, 59, 60, 61, 87, 88, -1, 29, 30,
! 31, 32, -1, 34, 35, 36, 37, 38, -1, -1,
! -1, -1, 43, 3, -1, -1, -1, -1, 49, 9,
! 10, 52, 12, -1, -1, -1, 57, 58, 59, -1,
! -1, 62, 63, -1, -1, -1, 67, -1, -1, -1,
! 30, -1, 32, -1, 34, 35, 36, 37, 38, -1,
! -1, -1, -1, 43, 3, -1, 87, 88, -1, 49,
! 9, 10, 52, 12, -1, -1, -1, 57, 58, 59,
! -1, -1, 62, 63, -1, -1, -1, 67, -1, -1,
! -1, 30, -1, 32, -1, 34, 35, 36, 37, 38,
! -1, -1, -1, -1, 43, 85, -1, 87, 88, -1,
! 49, -1, -1, 52, -1, -1, -1, -1, 57, 58,
! 59, -1, -1, 62, 63, 3, -1, -1, 67, -1,
! -1, 9, 10, -1, 12, -1, 4, -1, -1, 7,
! 8, -1, -1, -1, -1, 13, 14, 15, 87, 88,
! -1, -1, 30, -1, 32, -1, 34, 35, 36, 37,
! 38, 29, -1, 31, -1, 43, 3, -1, -1, -1,
-1, 49, 9, 10, 52, 12, -1, -1, -1, 57,
! 58, 59, -1, -1, 62, 63, -1, -1, -1, 67,
! -1, -1, -1, 30, -1, 32, -1, 34, 35, 36,
37, 38, -1, -1, -1, -1, 43, 3, -1, 87,
88, -1, 49, 9, 10, 52, 12, -1, -1, -1,
! 57, 58, 59, -1, -1, 62, 63, -1, -1, -1,
! 67, -1, -1, -1, 30, 11, 32, -1, 34, 35,
! 36, 37, 38, -1, -1, -1, -1, 43, -1, -1,
87, 88, -1, 49, -1, -1, 52, -1, -1, -1,
! 11, 57, 58, 59, -1, -1, 62, 63, 44, 45,
! 46, 67, 48, 49, 50, 51, 52, 53, 54, 55,
! 56, 57, 58, 59, 60, 61, -1, -1, -1, -1,
! -1, 87, 88, 44, 45, 46, 47, 48, 49, 50,
! 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
! 61, -1, 44, 45, 46, 91, 48, 49, 50, 51,
52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
! 44, 45, 46, -1, 48, 49, 50, 51, 52, 53,
! 54, 55, 56, 57, 58, 59, 60, 61, -1, -1,
! -1, -1, -1, -1, -1, -1, 44, 45, 46, 91,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
! 58, 59, 60, 61, -1, 89, 44, 45, 46, -1,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
! 58, 59, 60, 61, -1, -1, -1, -1, 44, 45,
! 46, 89, 48, 49, 50, 51, 52, 53, 54, 55,
! 56, 57, 58, 59, 60, 61, -1, -1, -1, -1,
! -1, 89, 31, 50, 51, 52, 53, 54, 55, 56,
! 57, 58, 59, 60, 61, 44, 45, 46, 84, 48,
49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
! 59, 60, 61, 4, 5, 6, 7, 8, -1, -1,
! -1, -1, 13, 14, 15, 49, 50, 51, 52, 53,
! 54, 55, 56, 57, 58, 59, 60, 61, 29, 44,
! 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
! 55, 56, 57, 58, 59, 60, 61, 44, 45, 46,
! -1, 48, 49, 50, 51, 52, 53, 54, 55, 56,
! 57, 58, 59, 60, 61, 46, -1, 48, 49, 50,
! 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
! 61
};
! /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
! symbol of state STATE-NUM. */
! static const unsigned short yystos[] =
{
! 0, 93, 94, 95, 0, 96, 1, 4, 5, 6,
! 7, 8, 13, 14, 15, 28, 29, 31, 32, 85,
! 97, 98, 99, 100, 115, 131, 134, 135, 136, 137,
! 138, 139, 140, 141, 142, 143, 144, 145, 146, 147,
! 148, 149, 150, 151, 157, 159, 160, 161, 162, 163,
! 172, 173, 177, 200, 201, 202, 203, 208, 293, 97,
! 85, 86, 172, 172, 172, 67, 67, 67, 3, 59,
! 67, 165, 169, 199, 8, 159, 160, 172, 177, 8,
! 159, 160, 177, 8, 159, 160, 172, 177, 8, 159,
! 160, 177, 8, 161, 162, 172, 177, 8, 161, 162,
! 177, 8, 161, 162, 172, 177, 8, 161, 162, 177,
! 8, 159, 160, 172, 177, 8, 159, 160, 177, 8,
! 159, 160, 172, 177, 8, 159, 160, 177, 8, 161,
! 162, 172, 177, 8, 161, 162, 177, 8, 161, 162,
! 172, 177, 8, 161, 162, 177, 131, 131, 85, 173,
! 3, 4, 90, 107, 90, 107, 90, 107, 97, 3,
! 9, 10, 12, 30, 34, 35, 36, 37, 38, 43,
! 49, 52, 57, 58, 59, 62, 63, 67, 87, 88,
! 108, 109, 111, 112, 113, 114, 116, 117, 123, 247,
! 293, 67, 109, 134, 135, 136, 137, 138, 139, 140,
! 141, 156, 220, 134, 135, 136, 137, 155, 158, 171,
! 172, 85, 89, 1, 28, 67, 68, 105, 166, 228,
! 4, 59, 67, 164, 167, 194, 195, 199, 165, 199,
! 211, 212, 90, 211, 90, 207, 90, 116, 116, 67,
! 67, 67, 107, 116, 1, 90, 109, 220, 116, 84,
! 89, 67, 112, 67, 112, 44, 45, 46, 48, 49,
! 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
! 60, 61, 62, 63, 66, 67, 68, 69, 1, 86,
! 236, 245, 116, 7, 8, 107, 174, 175, 176, 177,
! 84, 221, 84, 199, 199, 132, 171, 67, 171, 288,
! 6, 155, 158, 1, 125, 126, 127, 128, 235, 254,
! 171, 158, 171, 85, 89, 1, 101, 166, 67, 228,
! 85, 1, 103, 86, 1, 85, 134, 135, 136, 137,
! 138, 139, 140, 141, 154, 155, 213, 293, 204, 86,
! 205, 1, 107, 218, 219, 206, 117, 117, 220, 84,
! 84, 84, 85, 117, 220, 220, 117, 117, 120, 122,
! 119, 118, 117, 117, 117, 117, 117, 117, 117, 117,
! 117, 117, 117, 117, 107, 110, 111, 109, 107, 84,
! 33, 240, 241, 242, 84, 84, 89, 67, 59, 67,
! 222, 224, 225, 226, 227, 228, 84, 169, 199, 10,
! 289, 158, 6, 59, 91, 109, 85, 106, 235, 127,
! 255, 44, 195, 195, 132, 125, 171, 288, 125, 171,
! 131, 131, 85, 213, 211, 171, 211, 44, 89, 210,
! 218, 89, 89, 89, 90, 116, 84, 84, 109, 47,
! 117, 117, 84, 91, 107, 292, 1, 130, 229, 230,
! 231, 232, 233, 234, 235, 246, 254, 258, 259, 242,
! 84, 175, 3, 110, 158, 171, 278, 67, 228, 84,
! 1, 3, 11, 134, 135, 138, 139, 142, 143, 146,
! 147, 152, 153, 280, 283, 284, 286, 290, 291, 109,
! 109, 91, 91, 254, 129, 152, 153, 170, 84, 167,
! 194, 102, 44, 104, 214, 216, 254, 215, 217, 254,
! 86, 86, 117, 219, 86, 210, 220, 117, 220, 124,
! 47, 117, 85, 89, 130, 258, 259, 130, 258, 259,
! 254, 258, 259, 130, 258, 259, 235, 86, 255, 84,
! 89, 84, 225, 226, 224, 279, 171, 278, 84, 131,
! 287, 287, 84, 85, 89, 84, 89, 91, 91, 255,
! 85, 131, 85, 131, 1, 90, 117, 178, 254, 168,
! 254, 89, 255, 89, 255, 171, 171, 171, 86, 84,
! 89, 84, 1, 3, 66, 68, 90, 107, 117, 180,
! 181, 182, 184, 186, 187, 121, 107, 255, 237, 4,
! 22, 23, 24, 25, 26, 27, 28, 85, 90, 107,
! 109, 133, 150, 151, 157, 238, 244, 248, 270, 271,
! 293, 111, 84, 280, 4, 59, 67, 196, 197, 198,
! 199, 223, 224, 225, 59, 67, 199, 223, 281, 11,
! 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
! 144, 145, 146, 147, 148, 149, 150, 151, 285, 3,
! 1, 243, 248, 164, 165, 179, 255, 178, 255, 132,
! 47, 194, 132, 47, 199, 171, 117, 107, 117, 185,
! 47, 86, 89, 209, 44, 187, 184, 117, 117, 47,
! 85, 85, 85, 109, 59, 107, 8, 272, 254, 85,
! 131, 131, 85, 16, 18, 19, 20, 21, 249, 250,
! 252, 260, 245, 133, 84, 158, 171, 171, 67, 228,
! 67, 228, 171, 172, 158, 171, 171, 171, 131, 131,
! 248, 85, 85, 180, 243, 243, 216, 254, 117, 47,
! 171, 217, 117, 47, 171, 84, 11, 91, 180, 183,
! 182, 184, 11, 47, 85, 109, 85, 67, 255, 164,
! 188, 194, 165, 191, 199, 251, 262, 253, 264, 67,
! 17, 1, 238, 257, 1, 67, 239, 197, 198, 198,
! 288, 288, 282, 196, 199, 223, 199, 223, 86, 255,
! 171, 117, 171, 117, 117, 86, 184, 117, 85, 109,
! 47, 85, 189, 85, 192, 67, 67, 257, 67, 109,
! 1, 261, 256, 258, 259, 109, 84, 280, 171, 171,
! 171, 171, 171, 91, 47, 47, 84, 171, 125, 125,
! 109, 109, 18, 109, 133, 269, 273, 84, 257, 239,
! 256, 84, 10, 68, 274, 275, 276, 85, 190, 193,
! 84, 84, 265, 85, 268, 85, 67, 107, 47, 84,
! 89, 254, 254, 263, 273, 257, 109, 91, 274, 85,
! 276, 255, 255, 257, 85, 84, 10, 47, 84, 248,
! 248, 266, 67, 10, 277, 85, 273, 109, 84, 89,
! 84, 84, 85, 10, 267, 257
};
#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
# define YYSIZE_T __SIZE_TYPE__
#endif
*************** union yyalloc
*** 1813,1826 ****
# define YYSIZE_T size_t
#endif
#if ! defined (YYSIZE_T)
! # ifdef __cplusplus
! # include /* INFRINGES ON USER NAME SPACE */
! # define YYSIZE_T std::size_t
! # else
! # ifdef __STDC__
! # include /* INFRINGES ON USER NAME SPACE */
! # define YYSIZE_T size_t
! # endif
# endif
#endif
#if ! defined (YYSIZE_T)
--- 2040,2048 ----
# define YYSIZE_T size_t
#endif
#if ! defined (YYSIZE_T)
! # if defined (__STDC__) || defined (__cplusplus)
! # include /* INFRINGES ON USER NAME SPACE */
! # define YYSIZE_T size_t
# endif
#endif
#if ! defined (YYSIZE_T)
*************** union yyalloc
*** 1831,1844 ****
#define yyclearin (yychar = YYEMPTY)
#define YYEMPTY -2
#define YYEOF 0
#define YYACCEPT goto yyacceptlab
! #define YYABORT goto yyabortlab
#define YYERROR goto yyerrlab1
/* Like YYERROR except do call yyerror. This remains here temporarily
to ease the transition to the new meaning of YYERROR, for GCC.
Once GCC version 2 has supplanted version 1, this can go. */
#define YYFAIL goto yyerrlab
#define YYRECOVERING() (!!yyerrstatus)
#define YYBACKUP(Token, Value) \
do \
if (yychar == YYEMPTY && yylen == 1) \
--- 2053,2071 ----
#define yyclearin (yychar = YYEMPTY)
#define YYEMPTY -2
#define YYEOF 0
+
#define YYACCEPT goto yyacceptlab
! #define YYABORT goto yyabortlab
#define YYERROR goto yyerrlab1
+
/* Like YYERROR except do call yyerror. This remains here temporarily
to ease the transition to the new meaning of YYERROR, for GCC.
Once GCC version 2 has supplanted version 1, this can go. */
+
#define YYFAIL goto yyerrlab
+
#define YYRECOVERING() (!!yyerrstatus)
+
#define YYBACKUP(Token, Value) \
do \
if (yychar == YYEMPTY && yylen == 1) \
*************** while (0)
*** 1859,1910 ****
#define YYTERROR 1
#define YYERRCODE 256
-
/* YYLLOC_DEFAULT -- Compute the default location (before the actions
! are run).
!
! When YYLLOC_DEFAULT is run, CURRENT is set the location of the
! first token. By default, to implement support for ranges, extend
! its range to the last symbol. */
#ifndef YYLLOC_DEFAULT
! # define YYLLOC_DEFAULT(Current, Rhs, N) \
! Current.last_line = Rhs[N].last_line; \
! Current.last_column = Rhs[N].last_column;
#endif
-
/* YYLEX -- calling `yylex' with the right arguments. */
! #if YYPURE
! # if YYLSP_NEEDED
! # ifdef YYLEX_PARAM
! # define YYLEX yylex (&yylval, &yylloc, YYLEX_PARAM)
! # else
! # define YYLEX yylex (&yylval, &yylloc)
! # endif
! # else /* !YYLSP_NEEDED */
! # ifdef YYLEX_PARAM
! # define YYLEX yylex (&yylval, YYLEX_PARAM)
! # else
! # define YYLEX yylex (&yylval)
! # endif
! # endif /* !YYLSP_NEEDED */
! #else /* !YYPURE */
! # define YYLEX yylex ()
! #endif /* !YYPURE */
!
/* Enable debugging if requested. */
#if YYDEBUG
# ifndef YYFPRINTF
! # ifdef __cplusplus
! # include /* INFRINGES ON USER NAME SPACE */
! # else
! # include /* INFRINGES ON USER NAME SPACE */
! # endif
! # define YYFPRINTF YYSTD (fprintf)
# endif
# define YYDPRINTF(Args) \
--- 2086,2112 ----
#define YYTERROR 1
#define YYERRCODE 256
/* YYLLOC_DEFAULT -- Compute the default location (before the actions
! are run). */
#ifndef YYLLOC_DEFAULT
! # define YYLLOC_DEFAULT(Current, Rhs, N) \
! Current.first_line = Rhs[1].first_line; \
! Current.first_column = Rhs[1].first_column; \
! Current.last_line = Rhs[N].last_line; \
! Current.last_column = Rhs[N].last_column;
#endif
/* YYLEX -- calling `yylex' with the right arguments. */
! #define YYLEX yylex ()
/* Enable debugging if requested. */
#if YYDEBUG
# ifndef YYFPRINTF
! # include /* INFRINGES ON USER NAME SPACE */
! # define YYFPRINTF fprintf
# endif
# define YYDPRINTF(Args) \
*************** do { \
*** 1912,1924 ****
if (yydebug) \
YYFPRINTF Args; \
} while (0)
! /* Nonzero means print parse trace. [The following comment makes no
! sense to me. Could someone clarify it? --akim] Since this is
! uninitialized, it does not stop multiple parsers from coexisting.
! */
int yydebug;
#else /* !YYDEBUG */
# define YYDPRINTF(Args)
#endif /* !YYDEBUG */
/* YYINITDEPTH -- initial size of the parser's stacks. */
--- 2114,2130 ----
if (yydebug) \
YYFPRINTF Args; \
} while (0)
! # define YYDSYMPRINT(Args) \
! do { \
! if (yydebug) \
! yysymprint Args; \
! } while (0)
! /* Nonzero means print parse trace. It is left uninitialized so that
! multiple parsers can coexist. */
int yydebug;
#else /* !YYDEBUG */
# define YYDPRINTF(Args)
+ # define YYDSYMPRINT(Args)
#endif /* !YYDEBUG */
/* YYINITDEPTH -- initial size of the parser's stacks. */
*************** int yydebug;
*** 1940,1974 ****
#ifndef YYMAXDEPTH
# define YYMAXDEPTH 10000
#endif
-
- #if ! defined (yyoverflow) && ! defined (yymemcpy)
- # if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
- # define yymemcpy __builtin_memcpy
- # else /* not GNU C or C++ */
! /* This is the most reliable way to avoid incompatibilities
! in available built-in functions on various systems. */
! static void
! # if defined (__STDC__) || defined (__cplusplus)
! yymemcpy (char *yyto, const char *yyfrom, YYSIZE_T yycount)
! # else
! yymemcpy (yyto, yyfrom, yycount)
! char *yyto;
! const char *yyfrom;
! YYSIZE_T yycount;
! # endif
! {
! register const char *yyf = yyfrom;
! register char *yyt = yyto;
! register YYSIZE_T yyi = yycount;
!
! while (yyi-- != 0)
! *yyt++ = *yyf++;
! }
! # endif
! #endif
! #ifdef YYERROR_VERBOSE
# ifndef yystrlen
# if defined (__GLIBC__) && defined (_STRING_H)
--- 2146,2155 ----
#ifndef YYMAXDEPTH
# define YYMAXDEPTH 10000
#endif
!
! #if YYERROR_VERBOSE
# ifndef yystrlen
# if defined (__GLIBC__) && defined (_STRING_H)
*************** yystpcpy (yydest, yysrc)
*** 2018,2027 ****
}
# endif
# endif
! #endif
- #line 345 "/usr/share/bison/bison.simple"
/* The user can define YYPARSE_PARAM as the name of an argument to be passed
into yyparse. The argument should have type void *.
--- 2199,2271 ----
}
# endif
# endif
!
! #endif /* !YYERROR_VERBOSE */
!
+ #if YYDEBUG
+ /*-----------------------------.
+ | Print this symbol on YYOUT. |
+ `-----------------------------*/
+
+ static void
+ #if defined (__STDC__) || defined (__cplusplus)
+ yysymprint (FILE* yyout, int yytype, YYSTYPE yyvalue)
+ #else
+ yysymprint (yyout, yytype, yyvalue)
+ FILE* yyout;
+ int yytype;
+ YYSTYPE yyvalue;
+ #endif
+ {
+ /* Pacify ``unused variable'' warnings. */
+ (void) yyvalue;
+
+ if (yytype < YYNTOKENS)
+ {
+ YYFPRINTF (yyout, "token %s (", yytname[yytype]);
+ # ifdef YYPRINT
+ YYPRINT (yyout, yytoknum[yytype], yyvalue);
+ # endif
+ }
+ else
+ YYFPRINTF (yyout, "nterm %s (", yytname[yytype]);
+
+ switch (yytype)
+ {
+ default:
+ break;
+ }
+ YYFPRINTF (yyout, ")");
+ }
+ #endif /* YYDEBUG. */
+
+
+ /*-----------------------------------------------.
+ | Release the memory associated to this symbol. |
+ `-----------------------------------------------*/
+
+ static void
+ #if defined (__STDC__) || defined (__cplusplus)
+ yydestruct (int yytype, YYSTYPE yyvalue)
+ #else
+ yydestruct (yytype, yyvalue)
+ int yytype;
+ YYSTYPE yyvalue;
+ #endif
+ {
+ /* Pacify ``unused variable'' warnings. */
+ (void) yyvalue;
+
+ switch (yytype)
+ {
+ default:
+ break;
+ }
+ }
+
+
/* The user can define YYPARSE_PARAM as the name of an argument to be passed
into yyparse. The argument should have type void *.
*************** yystpcpy (yydest, yysrc)
*** 2030,2042 ****
to the proper pointer type. */
#ifdef YYPARSE_PARAM
! # ifdef __cplusplus
# define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
# define YYPARSE_PARAM_DECL
! # else /* !__cplusplus */
# define YYPARSE_PARAM_ARG YYPARSE_PARAM
# define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
! # endif /* !__cplusplus */
#else /* !YYPARSE_PARAM */
# define YYPARSE_PARAM_ARG
# define YYPARSE_PARAM_DECL
--- 2274,2286 ----
to the proper pointer type. */
#ifdef YYPARSE_PARAM
! # if defined (__STDC__) || defined (__cplusplus)
# define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
# define YYPARSE_PARAM_DECL
! # else
# define YYPARSE_PARAM_ARG YYPARSE_PARAM
# define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
! # endif
#else /* !YYPARSE_PARAM */
# define YYPARSE_PARAM_ARG
# define YYPARSE_PARAM_DECL
*************** yystpcpy (yydest, yysrc)
*** 2045,2096 ****
/* Prevent warning if -Wstrict-prototypes. */
#ifdef __GNUC__
# ifdef YYPARSE_PARAM
! YYPARSE_RETURN_TYPE yyparse (void *);
# else
! YYPARSE_RETURN_TYPE yyparse (void);
# endif
#endif
- /* YY_DECL_VARIABLES -- depending whether we use a pure parser,
- variables are global, or local to YYPARSE. */
! #define YY_DECL_NON_LSP_VARIABLES \
! /* The lookahead symbol. */ \
! int yychar; \
! \
! /* The semantic value of the lookahead symbol. */ \
! YYSTYPE yylval; \
! \
! /* Number of parse errors so far. */ \
! int yynerrs;
!
! #if YYLSP_NEEDED
! # define YY_DECL_VARIABLES \
! YY_DECL_NON_LSP_VARIABLES \
! \
! /* Location data for the lookahead symbol. */ \
! YYLTYPE yylloc;
! #else
! # define YY_DECL_VARIABLES \
! YY_DECL_NON_LSP_VARIABLES
! #endif
! /* If nonreentrant, generate the variables here. */
- #if !YYPURE
- YY_DECL_VARIABLES
- #endif /* !YYPURE */
! YYPARSE_RETURN_TYPE
yyparse (YYPARSE_PARAM_ARG)
YYPARSE_PARAM_DECL
{
! /* If reentrant, generate the variables here. */
! #if YYPURE
! YY_DECL_VARIABLES
! #endif /* !YYPURE */
!
register int yystate;
register int yyn;
int yyresult;
--- 2289,2316 ----
/* Prevent warning if -Wstrict-prototypes. */
#ifdef __GNUC__
# ifdef YYPARSE_PARAM
! int yyparse (void *);
# else
! int yyparse (void);
# endif
#endif
! /* The lookahead symbol. */
! int yychar;
+ /* The semantic value of the lookahead symbol. */
+ YYSTYPE yylval;
! /* Number of parse errors so far. */
! int yynerrs;
! int
yyparse (YYPARSE_PARAM_ARG)
YYPARSE_PARAM_DECL
{
!
register int yystate;
register int yyn;
int yyresult;
*************** yyparse (YYPARSE_PARAM_ARG)
*** 2107,2113 ****
Refer to the stacks thru separate pointers, to allow yyoverflow
to reallocate them elsewhere. */
! /* The state stack. */
short yyssa[YYINITDEPTH];
short *yyss = yyssa;
register short *yyssp;
--- 2327,2333 ----
Refer to the stacks thru separate pointers, to allow yyoverflow
to reallocate them elsewhere. */
! /* The state stack. */
short yyssa[YYINITDEPTH];
short *yyss = yyssa;
register short *yyssp;
*************** yyparse (YYPARSE_PARAM_ARG)
*** 2117,2147 ****
YYSTYPE *yyvs = yyvsa;
register YYSTYPE *yyvsp;
- #if YYLSP_NEEDED
- /* The location stack. */
- YYLTYPE yylsa[YYINITDEPTH];
- YYLTYPE *yyls = yylsa;
- YYLTYPE *yylsp;
- #endif
- #if YYLSP_NEEDED
- # define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
- #else
- # define YYPOPSTACK (yyvsp--, yyssp--)
- #endif
! YYSIZE_T yystacksize = YYINITDEPTH;
/* The variables used to return semantic value and location from the
action routines. */
YYSTYPE yyval;
! #if YYLSP_NEEDED
! YYLTYPE yyloc;
! #endif
/* When reducing, the number of symbols on the RHS of the reduced
! rule. */
int yylen;
YYDPRINTF ((stderr, "Starting parse\n"));
--- 2337,2355 ----
YYSTYPE *yyvs = yyvsa;
register YYSTYPE *yyvsp;
! #define YYPOPSTACK (yyvsp--, yyssp--)
+ YYSIZE_T yystacksize = YYINITDEPTH;
/* The variables used to return semantic value and location from the
action routines. */
YYSTYPE yyval;
!
/* When reducing, the number of symbols on the RHS of the reduced
! rule. */
int yylen;
YYDPRINTF ((stderr, "Starting parse\n"));
*************** yyparse (YYPARSE_PARAM_ARG)
*** 2158,2166 ****
yyssp = yyss;
yyvsp = yyvs;
! #if YYLSP_NEEDED
! yylsp = yyls;
! #endif
goto yysetstate;
/*------------------------------------------------------------.
--- 2366,2372 ----
yyssp = yyss;
yyvsp = yyvs;
!
goto yysetstate;
/*------------------------------------------------------------.
*************** yyparse (YYPARSE_PARAM_ARG)
*** 2188,2215 ****
YYSTYPE *yyvs1 = yyvs;
short *yyss1 = yyss;
/* Each stack pointer address is followed by the size of the
! data in use in that stack, in bytes. */
! # if YYLSP_NEEDED
! YYLTYPE *yyls1 = yyls;
! /* This used to be a conditional around just the two extra args,
! but that might be undefined if yyoverflow is a macro. */
! yyoverflow ("parser stack overflow",
! &yyss1, yysize * sizeof (*yyssp),
! &yyvs1, yysize * sizeof (*yyvsp),
! &yyls1, yysize * sizeof (*yylsp),
! &yystacksize);
! yyls = yyls1;
! # else
yyoverflow ("parser stack overflow",
&yyss1, yysize * sizeof (*yyssp),
&yyvs1, yysize * sizeof (*yyvsp),
&yystacksize);
! # endif
yyss = yyss1;
yyvs = yyvs1;
}
#else /* no yyoverflow */
/* Extend the stack our own way. */
if (yystacksize >= YYMAXDEPTH)
goto yyoverflowlab;
--- 2394,2417 ----
YYSTYPE *yyvs1 = yyvs;
short *yyss1 = yyss;
+
/* Each stack pointer address is followed by the size of the
! data in use in that stack, in bytes. This used to be a
! conditional around just the two extra args, but that might
! be undefined if yyoverflow is a macro. */
yyoverflow ("parser stack overflow",
&yyss1, yysize * sizeof (*yyssp),
&yyvs1, yysize * sizeof (*yyvsp),
+
&yystacksize);
!
yyss = yyss1;
yyvs = yyvs1;
}
#else /* no yyoverflow */
+ # ifndef YYSTACK_RELOCATE
+ goto yyoverflowlab;
+ # else
/* Extend the stack our own way. */
if (yystacksize >= YYMAXDEPTH)
goto yyoverflowlab;
*************** yyparse (YYPARSE_PARAM_ARG)
*** 2223,2244 ****
(union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
if (! yyptr)
goto yyoverflowlab;
! YYSTACK_RELOCATE (short, yyss);
! YYSTACK_RELOCATE (YYSTYPE, yyvs);
! # if YYLSP_NEEDED
! YYSTACK_RELOCATE (YYLTYPE, yyls);
! # endif
! # undef YYSTACK_RELOCATE
if (yyss1 != yyssa)
YYSTACK_FREE (yyss1);
}
#endif /* no yyoverflow */
yyssp = yyss + yysize - 1;
yyvsp = yyvs + yysize - 1;
! #if YYLSP_NEEDED
! yylsp = yyls + yysize - 1;
! #endif
YYDPRINTF ((stderr, "Stack size increased to %lu\n",
(unsigned long int) yystacksize));
--- 2425,2443 ----
(union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
if (! yyptr)
goto yyoverflowlab;
! YYSTACK_RELOCATE (yyss);
! YYSTACK_RELOCATE (yyvs);
!
! # undef YYSTACK_RELOCATE
if (yyss1 != yyssa)
YYSTACK_FREE (yyss1);
}
+ # endif
#endif /* no yyoverflow */
yyssp = yyss + yysize - 1;
yyvsp = yyvs + yysize - 1;
!
YYDPRINTF ((stderr, "Stack size increased to %lu\n",
(unsigned long int) yystacksize));
*************** yyparse (YYPARSE_PARAM_ARG)
*** 2251,2257 ****
goto yybackup;
-
/*-----------.
| yybackup. |
`-----------*/
--- 2450,2455 ----
*************** yybackup:
*** 2264,2270 ****
/* First try to decide what to do without reference to lookahead token. */
yyn = yypact[yystate];
! if (yyn == YYFLAG)
goto yydefault;
/* Not known => get a lookahead token if don't already have one. */
--- 2462,2468 ----
/* First try to decide what to do without reference to lookahead token. */
yyn = yypact[yystate];
! if (yyn == YYPACT_NINF)
goto yydefault;
/* Not known => get a lookahead token if don't already have one. */
*************** yybackup:
*** 2278,2289 ****
yychar = YYLEX;
}
! /* Convert token to internal form (in yychar1) for indexing tables with */
! if (yychar <= 0) /* This means end of input. */
{
yychar1 = 0;
! yychar = YYEOF; /* Don't call YYLEX any more */
YYDPRINTF ((stderr, "Now at end of input.\n"));
}
--- 2476,2487 ----
yychar = YYLEX;
}
! /* Convert token to internal form (in yychar1) for indexing tables with. */
! if (yychar <= 0) /* This means end of input. */
{
yychar1 = 0;
! yychar = YYEOF; /* Don't call YYLEX any more. */
YYDPRINTF ((stderr, "Now at end of input.\n"));
}
*************** yybackup:
*** 2291,2335 ****
{
yychar1 = YYTRANSLATE (yychar);
! #if YYDEBUG
! /* We have to keep this `#if YYDEBUG', since we use variables
! which are defined only if `YYDEBUG' is set. */
! if (yydebug)
! {
! YYFPRINTF (stderr, "Next token is %d (%s",
! yychar, yytname[yychar1]);
! /* Give the individual parser a way to print the precise
! meaning of a token, for further debugging info. */
! # ifdef YYPRINT
! YYPRINT (stderr, yychar, yylval);
! # endif
! YYFPRINTF (stderr, ")\n");
! }
! #endif
}
yyn += yychar1;
! if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
goto yydefault;
-
yyn = yytable[yyn];
!
! /* yyn is what to do for this token type in this state.
! Negative => reduce, -yyn is rule number.
! Positive => shift, yyn is new state.
! New state is final state => don't bother to shift,
! just return success.
! 0, or most negative number => error. */
!
! if (yyn < 0)
{
! if (yyn == YYFLAG)
goto yyerrlab;
yyn = -yyn;
goto yyreduce;
}
- else if (yyn == 0)
- goto yyerrlab;
if (yyn == YYFINAL)
YYACCEPT;
--- 2489,2514 ----
{
yychar1 = YYTRANSLATE (yychar);
! /* We have to keep this `#if YYDEBUG', since we use variables
! which are defined only if `YYDEBUG' is set. */
! YYDPRINTF ((stderr, "Next token is "));
! YYDSYMPRINT ((stderr, yychar1, yylval));
! YYDPRINTF ((stderr, "\n"));
}
+ /* If the proper action on seeing token YYCHAR1 is to reduce or to
+ detect an error, take that action. */
yyn += yychar1;
! if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yychar1)
goto yydefault;
yyn = yytable[yyn];
! if (yyn <= 0)
{
! if (yyn == 0 || yyn == YYTABLE_NINF)
goto yyerrlab;
yyn = -yyn;
goto yyreduce;
}
if (yyn == YYFINAL)
YYACCEPT;
*************** yybackup:
*** 2343,2351 ****
yychar = YYEMPTY;
*++yyvsp = yylval;
! #if YYLSP_NEEDED
! *++yylsp = yylloc;
! #endif
/* Count tokens shifted since error; after three, turn off error
status. */
--- 2522,2528 ----
yychar = YYEMPTY;
*++yyvsp = yylval;
!
/* Count tokens shifted since error; after three, turn off error
status. */
*************** yyreduce:
*** 2376,2394 ****
/* If YYLEN is nonzero, implement the default value of the action:
`$$ = $1'.
! Otherwise, the following line sets YYVAL to the semantic value of
! the lookahead token. This behavior is undocumented and Bison
users should not rely upon it. Assigning to YYVAL
unconditionally makes the parser a bit smaller, and it avoids a
GCC warning that YYVAL may be used uninitialized. */
yyval = yyvsp[1-yylen];
! #if YYLSP_NEEDED
! /* Similarly for the default location. Let the user run additional
! commands if for instance locations are ranges. */
! yyloc = yylsp[1-yylen];
! YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);
! #endif
#if YYDEBUG
/* We have to keep this `#if YYDEBUG', since we use variables which
--- 2553,2566 ----
/* If YYLEN is nonzero, implement the default value of the action:
`$$ = $1'.
! Otherwise, the following line sets YYVAL to garbage.
! This behavior is undocumented and Bison
users should not rely upon it. Assigning to YYVAL
unconditionally makes the parser a bit smaller, and it avoids a
GCC warning that YYVAL may be used uninitialized. */
yyval = yyvsp[1-yylen];
!
#if YYDEBUG
/* We have to keep this `#if YYDEBUG', since we use variables which
*************** yyreduce:
*** 2398,2424 ****
int yyi;
YYFPRINTF (stderr, "Reducing via rule %d (line %d), ",
! yyn, yyrline[yyn]);
/* Print the symbols being reduced, and their result. */
! for (yyi = yyprhs[yyn]; yyrhs[yyi] > 0; yyi++)
YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]);
}
#endif
!
! switch (yyn) {
!
! case 1:
! #line 324 "c-parse.y"
! { if (pedantic)
pedwarn ("ISO C forbids an empty source file");
finish_file ();
! ;
! break;}
! case 2:
! #line 329 "c-parse.y"
! {
/* In case there were missing closebraces,
get us back to the global binding level. */
while (! global_bindings_p ())
--- 2570,2596 ----
int yyi;
YYFPRINTF (stderr, "Reducing via rule %d (line %d), ",
! yyn - 1, yyrline[yyn]);
/* Print the symbols being reduced, and their result. */
! for (yyi = yyprhs[yyn]; yyrhs[yyi] >= 0; yyi++)
YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]);
}
#endif
! switch (yyn)
! {
! case 2:
! #line 289 "c-parse.y"
! { if (pedantic)
pedwarn ("ISO C forbids an empty source file");
finish_file ();
! }
! break;
!
! case 3:
! #line 294 "c-parse.y"
! {
/* In case there were missing closebraces,
get us back to the global binding level. */
while (! global_bindings_p ())
*************** case 2:
*** 2428,2833 ****
still works without it. */
finish_fname_decls ();
finish_file ();
! ;
! break;}
! case 3:
! #line 347 "c-parse.y"
! {yyval.ttype = NULL_TREE; ;
! break;}
! case 5:
! #line 348 "c-parse.y"
! {yyval.ttype = NULL_TREE; ggc_collect(); ;
! break;}
! case 7:
! #line 353 "c-parse.y"
! { parsing_iso_function_signature = false; ;
! break;}
! case 10:
! #line 360 "c-parse.y"
! { STRIP_NOPS (yyvsp[-2].ttype);
if ((TREE_CODE (yyvsp[-2].ttype) == ADDR_EXPR
&& TREE_CODE (TREE_OPERAND (yyvsp[-2].ttype, 0)) == STRING_CST)
|| TREE_CODE (yyvsp[-2].ttype) == STRING_CST)
assemble_asm (yyvsp[-2].ttype);
else
! error ("argument of `asm' is not a constant string"); ;
! break;}
! case 11:
! #line 368 "c-parse.y"
! { RESTORE_EXT_FLAGS (yyvsp[-1].ttype); ;
! break;}
! case 12:
! #line 373 "c-parse.y"
! { if (pedantic)
error ("ISO C forbids data definition with no type or storage class");
else
warning ("data definition has no type or storage class");
! POP_DECLSPEC_STACK; ;
! break;}
! case 13:
! #line 380 "c-parse.y"
! { POP_DECLSPEC_STACK; ;
! break;}
! case 14:
! #line 382 "c-parse.y"
! { POP_DECLSPEC_STACK; ;
! break;}
! case 15:
! #line 384 "c-parse.y"
! { shadow_tag (yyvsp[-1].ttype); ;
! break;}
! case 18:
! #line 388 "c-parse.y"
! { if (pedantic)
! pedwarn ("ISO C does not allow extra `;' outside of a function"); ;
! break;}
! case 19:
! #line 394 "c-parse.y"
! { if (! start_function (current_declspecs, yyvsp[0].ttype,
all_prefix_attributes))
YYERROR1;
! ;
! break;}
! case 20:
! #line 399 "c-parse.y"
! { store_parm_decls (); ;
! break;}
! case 21:
! #line 401 "c-parse.y"
! { DECL_SOURCE_FILE (current_function_decl) = yyvsp[-2].filename;
DECL_SOURCE_LINE (current_function_decl) = yyvsp[-1].lineno;
finish_function (0, 1);
! POP_DECLSPEC_STACK; ;
! break;}
! case 22:
! #line 406 "c-parse.y"
! { POP_DECLSPEC_STACK; ;
! break;}
! case 23:
! #line 408 "c-parse.y"
! { if (! start_function (current_declspecs, yyvsp[0].ttype,
all_prefix_attributes))
YYERROR1;
! ;
! break;}
! case 24:
! #line 413 "c-parse.y"
! { store_parm_decls (); ;
! break;}
! case 25:
! #line 415 "c-parse.y"
! { DECL_SOURCE_FILE (current_function_decl) = yyvsp[-2].filename;
DECL_SOURCE_LINE (current_function_decl) = yyvsp[-1].lineno;
finish_function (0, 1);
! POP_DECLSPEC_STACK; ;
! break;}
! case 26:
! #line 420 "c-parse.y"
! { POP_DECLSPEC_STACK; ;
! break;}
! case 27:
! #line 422 "c-parse.y"
! { if (! start_function (NULL_TREE, yyvsp[0].ttype,
all_prefix_attributes))
YYERROR1;
! ;
! break;}
! case 28:
! #line 427 "c-parse.y"
! { store_parm_decls (); ;
! break;}
! case 29:
! #line 429 "c-parse.y"
! { DECL_SOURCE_FILE (current_function_decl) = yyvsp[-2].filename;
DECL_SOURCE_LINE (current_function_decl) = yyvsp[-1].lineno;
finish_function (0, 1);
! POP_DECLSPEC_STACK; ;
! break;}
! case 30:
! #line 434 "c-parse.y"
! { POP_DECLSPEC_STACK; ;
! break;}
! case 33:
! #line 443 "c-parse.y"
! { yyval.code = ADDR_EXPR; ;
! break;}
! case 34:
! #line 445 "c-parse.y"
! { yyval.code = NEGATE_EXPR; ;
! break;}
! case 35:
! #line 447 "c-parse.y"
! { yyval.code = CONVERT_EXPR;
if (warn_traditional && !in_system_header)
warning ("traditional C rejects the unary plus operator");
! ;
! break;}
! case 36:
! #line 452 "c-parse.y"
! { yyval.code = PREINCREMENT_EXPR; ;
! break;}
! case 37:
#line 454 "c-parse.y"
! { yyval.code = PREDECREMENT_EXPR; ;
! break;}
! case 38:
#line 456 "c-parse.y"
! { yyval.code = BIT_NOT_EXPR; ;
! break;}
! case 39:
! #line 458 "c-parse.y"
! { yyval.code = TRUTH_NOT_EXPR; ;
! break;}
! case 40:
#line 462 "c-parse.y"
! { yyval.ttype = build_compound_expr (yyvsp[0].ttype); ;
! break;}
! case 41:
! #line 467 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
! break;}
! case 43:
#line 473 "c-parse.y"
! { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
! break;}
! case 44:
! #line 475 "c-parse.y"
! { chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
! break;}
! case 46:
#line 481 "c-parse.y"
! { yyval.ttype = build_indirect_ref (yyvsp[0].ttype, "unary *"); ;
! break;}
! case 47:
! #line 484 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype;
! RESTORE_EXT_FLAGS (yyvsp[-1].ttype); ;
! break;}
! case 48:
! #line 487 "c-parse.y"
! { yyval.ttype = build_unary_op (yyvsp[-1].code, yyvsp[0].ttype, 0);
! overflow_warning (yyval.ttype); ;
! break;}
! case 49:
#line 491 "c-parse.y"
! { yyval.ttype = finish_label_address_expr (yyvsp[0].ttype); ;
! break;}
! case 50:
! #line 493 "c-parse.y"
! { skip_evaluation--;
! if (TREE_CODE (yyvsp[0].ttype) == COMPONENT_REF
! && DECL_C_BIT_FIELD (TREE_OPERAND (yyvsp[0].ttype, 1)))
! error ("`sizeof' applied to a bit-field");
! yyval.ttype = c_sizeof (TREE_TYPE (yyvsp[0].ttype)); ;
! break;}
! case 51:
#line 499 "c-parse.y"
! { skip_evaluation--;
! yyval.ttype = c_sizeof (groktypename (yyvsp[-1].ttype)); ;
! break;}
! case 52:
! #line 502 "c-parse.y"
! { skip_evaluation--;
! yyval.ttype = c_alignof_expr (yyvsp[0].ttype); ;
! break;}
! case 53:
#line 505 "c-parse.y"
! { skip_evaluation--;
! yyval.ttype = c_alignof (groktypename (yyvsp[-1].ttype)); ;
! break;}
! case 54:
! #line 508 "c-parse.y"
! { yyval.ttype = build_unary_op (REALPART_EXPR, yyvsp[0].ttype, 0); ;
! break;}
! case 55:
! #line 510 "c-parse.y"
! { yyval.ttype = build_unary_op (IMAGPART_EXPR, yyvsp[0].ttype, 0); ;
! break;}
! case 56:
! #line 514 "c-parse.y"
! { skip_evaluation++; ;
! break;}
! case 57:
! #line 518 "c-parse.y"
! { skip_evaluation++; ;
! break;}
! case 58:
! #line 522 "c-parse.y"
! { skip_evaluation++; ;
! break;}
! case 60:
! #line 528 "c-parse.y"
! { yyval.ttype = c_cast_expr (yyvsp[-2].ttype, yyvsp[0].ttype); ;
! break;}
! case 62:
! #line 534 "c-parse.y"
! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
! break;}
! case 63:
! #line 536 "c-parse.y"
! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
! break;}
! case 64:
! #line 538 "c-parse.y"
! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
! break;}
! case 65:
! #line 540 "c-parse.y"
! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
! break;}
! case 66:
! #line 542 "c-parse.y"
! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
! break;}
! case 67:
! #line 544 "c-parse.y"
! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
! break;}
! case 68:
! #line 546 "c-parse.y"
! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
! break;}
! case 69:
! #line 548 "c-parse.y"
! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
! break;}
! case 70:
! #line 550 "c-parse.y"
! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
! break;}
! case 71:
! #line 552 "c-parse.y"
! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
! break;}
! case 72:
! #line 554 "c-parse.y"
! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
! break;}
! case 73:
! #line 556 "c-parse.y"
! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
! break;}
! case 74:
! #line 558 "c-parse.y"
! { yyvsp[-1].ttype = c_common_truthvalue_conversion
(default_conversion (yyvsp[-1].ttype));
! skip_evaluation += yyvsp[-1].ttype == boolean_false_node; ;
! break;}
! case 75:
! #line 562 "c-parse.y"
! { skip_evaluation -= yyvsp[-3].ttype == boolean_false_node;
! yyval.ttype = parser_build_binary_op (TRUTH_ANDIF_EXPR, yyvsp[-3].ttype, yyvsp[0].ttype); ;
! break;}
! case 76:
! #line 565 "c-parse.y"
! { yyvsp[-1].ttype = c_common_truthvalue_conversion
(default_conversion (yyvsp[-1].ttype));
! skip_evaluation += yyvsp[-1].ttype == boolean_true_node; ;
! break;}
! case 77:
! #line 569 "c-parse.y"
! { skip_evaluation -= yyvsp[-3].ttype == boolean_true_node;
! yyval.ttype = parser_build_binary_op (TRUTH_ORIF_EXPR, yyvsp[-3].ttype, yyvsp[0].ttype); ;
! break;}
! case 78:
! #line 572 "c-parse.y"
! { yyvsp[-1].ttype = c_common_truthvalue_conversion
(default_conversion (yyvsp[-1].ttype));
! skip_evaluation += yyvsp[-1].ttype == boolean_false_node; ;
! break;}
! case 79:
! #line 576 "c-parse.y"
! { skip_evaluation += ((yyvsp[-4].ttype == boolean_true_node)
! - (yyvsp[-4].ttype == boolean_false_node)); ;
! break;}
! case 80:
! #line 579 "c-parse.y"
! { skip_evaluation -= yyvsp[-6].ttype == boolean_true_node;
! yyval.ttype = build_conditional_expr (yyvsp[-6].ttype, yyvsp[-3].ttype, yyvsp[0].ttype); ;
! break;}
! case 81:
! #line 582 "c-parse.y"
! { if (pedantic)
pedwarn ("ISO C forbids omitting the middle term of a ?: expression");
/* Make sure first operand is calculated only once. */
yyvsp[0].ttype = save_expr (yyvsp[-1].ttype);
yyvsp[-1].ttype = c_common_truthvalue_conversion
(default_conversion (yyvsp[0].ttype));
! skip_evaluation += yyvsp[-1].ttype == boolean_true_node; ;
! break;}
! case 82:
! #line 590 "c-parse.y"
! { skip_evaluation -= yyvsp[-4].ttype == boolean_true_node;
! yyval.ttype = build_conditional_expr (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[0].ttype); ;
! break;}
! case 83:
! #line 593 "c-parse.y"
! { char class;
yyval.ttype = build_modify_expr (yyvsp[-2].ttype, NOP_EXPR, yyvsp[0].ttype);
class = TREE_CODE_CLASS (TREE_CODE (yyval.ttype));
if (IS_EXPR_CODE_CLASS (class))
C_SET_EXP_ORIGINAL_CODE (yyval.ttype, MODIFY_EXPR);
! ;
! break;}
! case 84:
! #line 600 "c-parse.y"
! { char class;
yyval.ttype = build_modify_expr (yyvsp[-2].ttype, yyvsp[-1].code, yyvsp[0].ttype);
/* This inhibits warnings in
c_common_truthvalue_conversion. */
class = TREE_CODE_CLASS (TREE_CODE (yyval.ttype));
if (IS_EXPR_CODE_CLASS (class))
C_SET_EXP_ORIGINAL_CODE (yyval.ttype, ERROR_MARK);
! ;
! break;}
! case 85:
! #line 612 "c-parse.y"
! {
if (yychar == YYEMPTY)
yychar = YYLEX;
yyval.ttype = build_external_ref (yyvsp[0].ttype, yychar == '(');
! ;
! break;}
! case 87:
! #line 619 "c-parse.y"
! { yyval.ttype = fix_string_type (yyval.ttype); ;
! break;}
! case 88:
! #line 621 "c-parse.y"
! { yyval.ttype = fname_decl (C_RID_CODE (yyval.ttype), yyval.ttype); ;
! break;}
! case 89:
! #line 623 "c-parse.y"
! { start_init (NULL_TREE, NULL, 0);
yyvsp[-2].ttype = groktypename (yyvsp[-2].ttype);
! really_start_incremental_init (yyvsp[-2].ttype); ;
! break;}
! case 90:
! #line 627 "c-parse.y"
! { tree constructor = pop_init_level (0);
tree type = yyvsp[-5].ttype;
finish_init ();
if (pedantic && ! flag_isoc99)
pedwarn ("ISO C89 forbids compound literals");
yyval.ttype = build_compound_literal (type, constructor);
! ;
! break;}
! case 91:
! #line 636 "c-parse.y"
! { char class = TREE_CODE_CLASS (TREE_CODE (yyvsp[-1].ttype));
if (IS_EXPR_CODE_CLASS (class))
C_SET_EXP_ORIGINAL_CODE (yyvsp[-1].ttype, ERROR_MARK);
! yyval.ttype = yyvsp[-1].ttype; ;
! break;}
! case 92:
! #line 641 "c-parse.y"
! { yyval.ttype = error_mark_node; ;
! break;}
! case 93:
! #line 643 "c-parse.y"
! { tree saved_last_tree;
if (pedantic)
pedwarn ("ISO C forbids braced-groups within expressions");
--- 2600,3083 ----
still works without it. */
finish_fname_decls ();
finish_file ();
! }
! break;
!
! case 4:
! #line 310 "c-parse.y"
! {yyval.ttype = NULL_TREE; }
! break;
!
! case 6:
! #line 311 "c-parse.y"
! {yyval.ttype = NULL_TREE; ggc_collect(); }
! break;
!
! case 8:
! #line 316 "c-parse.y"
! { parsing_iso_function_signature = false; }
! break;
!
! case 11:
! #line 323 "c-parse.y"
! { STRIP_NOPS (yyvsp[-2].ttype);
if ((TREE_CODE (yyvsp[-2].ttype) == ADDR_EXPR
&& TREE_CODE (TREE_OPERAND (yyvsp[-2].ttype, 0)) == STRING_CST)
|| TREE_CODE (yyvsp[-2].ttype) == STRING_CST)
assemble_asm (yyvsp[-2].ttype);
else
! error ("argument of `asm' is not a constant string"); }
! break;
!
! case 12:
! #line 331 "c-parse.y"
! { RESTORE_EXT_FLAGS (yyvsp[-1].ttype); }
! break;
!
! case 13:
! #line 336 "c-parse.y"
! { if (pedantic)
error ("ISO C forbids data definition with no type or storage class");
else
warning ("data definition has no type or storage class");
! POP_DECLSPEC_STACK; }
! break;
!
! case 14:
! #line 343 "c-parse.y"
! { POP_DECLSPEC_STACK; }
! break;
!
! case 15:
! #line 345 "c-parse.y"
! { POP_DECLSPEC_STACK; }
! break;
!
! case 16:
! #line 347 "c-parse.y"
! { shadow_tag (yyvsp[-1].ttype); }
! break;
!
! case 19:
! #line 351 "c-parse.y"
! { if (pedantic)
! pedwarn ("ISO C does not allow extra `;' outside of a function"); }
! break;
!
! case 20:
! #line 357 "c-parse.y"
! { if (! start_function (current_declspecs, yyvsp[0].ttype,
all_prefix_attributes))
YYERROR1;
! }
! break;
!
! case 21:
! #line 362 "c-parse.y"
! { store_parm_decls (); }
! break;
!
! case 22:
! #line 364 "c-parse.y"
! { DECL_SOURCE_FILE (current_function_decl) = yyvsp[-2].filename;
DECL_SOURCE_LINE (current_function_decl) = yyvsp[-1].lineno;
finish_function (0, 1);
! POP_DECLSPEC_STACK; }
! break;
!
! case 23:
! #line 369 "c-parse.y"
! { POP_DECLSPEC_STACK; }
! break;
!
! case 24:
! #line 371 "c-parse.y"
! { if (! start_function (current_declspecs, yyvsp[0].ttype,
all_prefix_attributes))
YYERROR1;
! }
! break;
!
! case 25:
! #line 376 "c-parse.y"
! { store_parm_decls (); }
! break;
!
! case 26:
! #line 378 "c-parse.y"
! { DECL_SOURCE_FILE (current_function_decl) = yyvsp[-2].filename;
DECL_SOURCE_LINE (current_function_decl) = yyvsp[-1].lineno;
finish_function (0, 1);
! POP_DECLSPEC_STACK; }
! break;
!
! case 27:
! #line 383 "c-parse.y"
! { POP_DECLSPEC_STACK; }
! break;
!
! case 28:
! #line 385 "c-parse.y"
! { if (! start_function (NULL_TREE, yyvsp[0].ttype,
all_prefix_attributes))
YYERROR1;
! }
! break;
!
! case 29:
! #line 390 "c-parse.y"
! { store_parm_decls (); }
! break;
!
! case 30:
! #line 392 "c-parse.y"
! { DECL_SOURCE_FILE (current_function_decl) = yyvsp[-2].filename;
DECL_SOURCE_LINE (current_function_decl) = yyvsp[-1].lineno;
finish_function (0, 1);
! POP_DECLSPEC_STACK; }
! break;
!
! case 31:
! #line 397 "c-parse.y"
! { POP_DECLSPEC_STACK; }
! break;
!
! case 34:
! #line 406 "c-parse.y"
! { yyval.code = ADDR_EXPR; }
! break;
!
! case 35:
! #line 408 "c-parse.y"
! { yyval.code = NEGATE_EXPR; }
! break;
!
! case 36:
! #line 410 "c-parse.y"
! { yyval.code = CONVERT_EXPR;
if (warn_traditional && !in_system_header)
warning ("traditional C rejects the unary plus operator");
! }
! break;
!
! case 37:
! #line 415 "c-parse.y"
! { yyval.code = PREINCREMENT_EXPR; }
! break;
!
! case 38:
! #line 417 "c-parse.y"
! { yyval.code = PREDECREMENT_EXPR; }
! break;
!
! case 39:
! #line 419 "c-parse.y"
! { yyval.code = BIT_NOT_EXPR; }
! break;
!
! case 40:
! #line 421 "c-parse.y"
! { yyval.code = TRUTH_NOT_EXPR; }
! break;
!
! case 41:
! #line 425 "c-parse.y"
! { yyval.ttype = build_compound_expr (yyvsp[0].ttype); }
! break;
!
! case 42:
! #line 430 "c-parse.y"
! { yyval.ttype = NULL_TREE; }
! break;
!
! case 44:
! #line 436 "c-parse.y"
! { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); }
! break;
!
! case 45:
! #line 438 "c-parse.y"
! { chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); }
! break;
!
! case 47:
! #line 444 "c-parse.y"
! { yyval.ttype = build_indirect_ref (yyvsp[0].ttype, "unary *"); }
! break;
!
! case 48:
! #line 447 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype;
! RESTORE_EXT_FLAGS (yyvsp[-1].ttype); }
! break;
!
! case 49:
! #line 450 "c-parse.y"
! { yyval.ttype = build_unary_op (yyvsp[-1].code, yyvsp[0].ttype, 0);
! overflow_warning (yyval.ttype); }
! break;
!
! case 50:
#line 454 "c-parse.y"
! { yyval.ttype = finish_label_address_expr (yyvsp[0].ttype); }
! break;
!
! case 51:
#line 456 "c-parse.y"
! { skip_evaluation--;
! if (TREE_CODE (yyvsp[0].ttype) == COMPONENT_REF
! && DECL_C_BIT_FIELD (TREE_OPERAND (yyvsp[0].ttype, 1)))
! error ("`sizeof' applied to a bit-field");
! yyval.ttype = c_sizeof (TREE_TYPE (yyvsp[0].ttype)); }
! break;
!
! case 52:
#line 462 "c-parse.y"
! { skip_evaluation--;
! yyval.ttype = c_sizeof (groktypename (yyvsp[-1].ttype)); }
! break;
!
! case 53:
! #line 465 "c-parse.y"
! { skip_evaluation--;
! yyval.ttype = c_alignof_expr (yyvsp[0].ttype); }
! break;
!
! case 54:
! #line 468 "c-parse.y"
! { skip_evaluation--;
! yyval.ttype = c_alignof (groktypename (yyvsp[-1].ttype)); }
! break;
!
! case 55:
! #line 471 "c-parse.y"
! { yyval.ttype = build_unary_op (REALPART_EXPR, yyvsp[0].ttype, 0); }
! break;
!
! case 56:
#line 473 "c-parse.y"
! { yyval.ttype = build_unary_op (IMAGPART_EXPR, yyvsp[0].ttype, 0); }
! break;
!
! case 57:
! #line 477 "c-parse.y"
! { skip_evaluation++; }
! break;
!
! case 58:
#line 481 "c-parse.y"
! { skip_evaluation++; }
! break;
!
! case 59:
! #line 485 "c-parse.y"
! { skip_evaluation++; }
! break;
!
! case 61:
#line 491 "c-parse.y"
! { yyval.ttype = c_cast_expr (yyvsp[-2].ttype, yyvsp[0].ttype); }
! break;
!
! case 63:
! #line 497 "c-parse.y"
! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); }
! break;
!
! case 64:
#line 499 "c-parse.y"
! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); }
! break;
!
! case 65:
! #line 501 "c-parse.y"
! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); }
! break;
!
! case 66:
! #line 503 "c-parse.y"
! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); }
! break;
!
! case 67:
#line 505 "c-parse.y"
! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); }
! break;
!
! case 68:
! #line 507 "c-parse.y"
! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); }
! break;
!
! case 69:
! #line 509 "c-parse.y"
! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); }
! break;
!
! case 70:
! #line 511 "c-parse.y"
! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); }
! break;
!
! case 71:
! #line 513 "c-parse.y"
! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); }
! break;
!
! case 72:
! #line 515 "c-parse.y"
! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); }
! break;
!
! case 73:
! #line 517 "c-parse.y"
! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); }
! break;
!
! case 74:
! #line 519 "c-parse.y"
! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); }
! break;
!
! case 75:
! #line 521 "c-parse.y"
! { yyvsp[-1].ttype = c_common_truthvalue_conversion
(default_conversion (yyvsp[-1].ttype));
! skip_evaluation += yyvsp[-1].ttype == boolean_false_node; }
! break;
!
! case 76:
! #line 525 "c-parse.y"
! { skip_evaluation -= yyvsp[-3].ttype == boolean_false_node;
! yyval.ttype = parser_build_binary_op (TRUTH_ANDIF_EXPR, yyvsp[-3].ttype, yyvsp[0].ttype); }
! break;
!
! case 77:
! #line 528 "c-parse.y"
! { yyvsp[-1].ttype = c_common_truthvalue_conversion
(default_conversion (yyvsp[-1].ttype));
! skip_evaluation += yyvsp[-1].ttype == boolean_true_node; }
! break;
!
! case 78:
! #line 532 "c-parse.y"
! { skip_evaluation -= yyvsp[-3].ttype == boolean_true_node;
! yyval.ttype = parser_build_binary_op (TRUTH_ORIF_EXPR, yyvsp[-3].ttype, yyvsp[0].ttype); }
! break;
!
! case 79:
! #line 535 "c-parse.y"
! { yyvsp[-1].ttype = c_common_truthvalue_conversion
(default_conversion (yyvsp[-1].ttype));
! skip_evaluation += yyvsp[-1].ttype == boolean_false_node; }
! break;
!
! case 80:
! #line 539 "c-parse.y"
! { skip_evaluation += ((yyvsp[-4].ttype == boolean_true_node)
! - (yyvsp[-4].ttype == boolean_false_node)); }
! break;
!
! case 81:
! #line 542 "c-parse.y"
! { skip_evaluation -= yyvsp[-6].ttype == boolean_true_node;
! yyval.ttype = build_conditional_expr (yyvsp[-6].ttype, yyvsp[-3].ttype, yyvsp[0].ttype); }
! break;
!
! case 82:
! #line 545 "c-parse.y"
! { if (pedantic)
pedwarn ("ISO C forbids omitting the middle term of a ?: expression");
/* Make sure first operand is calculated only once. */
yyvsp[0].ttype = save_expr (yyvsp[-1].ttype);
yyvsp[-1].ttype = c_common_truthvalue_conversion
(default_conversion (yyvsp[0].ttype));
! skip_evaluation += yyvsp[-1].ttype == boolean_true_node; }
! break;
!
! case 83:
! #line 553 "c-parse.y"
! { skip_evaluation -= yyvsp[-4].ttype == boolean_true_node;
! yyval.ttype = build_conditional_expr (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[0].ttype); }
! break;
!
! case 84:
! #line 556 "c-parse.y"
! { char class;
yyval.ttype = build_modify_expr (yyvsp[-2].ttype, NOP_EXPR, yyvsp[0].ttype);
class = TREE_CODE_CLASS (TREE_CODE (yyval.ttype));
if (IS_EXPR_CODE_CLASS (class))
C_SET_EXP_ORIGINAL_CODE (yyval.ttype, MODIFY_EXPR);
! }
! break;
!
! case 85:
! #line 563 "c-parse.y"
! { char class;
yyval.ttype = build_modify_expr (yyvsp[-2].ttype, yyvsp[-1].code, yyvsp[0].ttype);
/* This inhibits warnings in
c_common_truthvalue_conversion. */
class = TREE_CODE_CLASS (TREE_CODE (yyval.ttype));
if (IS_EXPR_CODE_CLASS (class))
C_SET_EXP_ORIGINAL_CODE (yyval.ttype, ERROR_MARK);
! }
! break;
!
! case 86:
! #line 575 "c-parse.y"
! {
if (yychar == YYEMPTY)
yychar = YYLEX;
yyval.ttype = build_external_ref (yyvsp[0].ttype, yychar == '(');
! }
! break;
!
! case 88:
! #line 582 "c-parse.y"
! { yyval.ttype = fix_string_type (yyval.ttype); }
! break;
!
! case 89:
! #line 584 "c-parse.y"
! { yyval.ttype = fname_decl (C_RID_CODE (yyval.ttype), yyval.ttype); }
! break;
!
! case 90:
! #line 586 "c-parse.y"
! { start_init (NULL_TREE, NULL, 0);
yyvsp[-2].ttype = groktypename (yyvsp[-2].ttype);
! really_start_incremental_init (yyvsp[-2].ttype); }
! break;
!
! case 91:
! #line 590 "c-parse.y"
! { tree constructor = pop_init_level (0);
tree type = yyvsp[-5].ttype;
finish_init ();
if (pedantic && ! flag_isoc99)
pedwarn ("ISO C89 forbids compound literals");
yyval.ttype = build_compound_literal (type, constructor);
! }
! break;
!
! case 92:
! #line 599 "c-parse.y"
! { char class = TREE_CODE_CLASS (TREE_CODE (yyvsp[-1].ttype));
if (IS_EXPR_CODE_CLASS (class))
C_SET_EXP_ORIGINAL_CODE (yyvsp[-1].ttype, ERROR_MARK);
! yyval.ttype = yyvsp[-1].ttype; }
! break;
!
! case 93:
! #line 604 "c-parse.y"
! { yyval.ttype = error_mark_node; }
! break;
!
! case 94:
! #line 606 "c-parse.y"
! { tree saved_last_tree;
if (pedantic)
pedwarn ("ISO C forbids braced-groups within expressions");
*************** case 93:
*** 2841,2868 ****
last_expr_type = void_type_node;
yyval.ttype = build1 (STMT_EXPR, last_expr_type, yyvsp[-2].ttype);
TREE_SIDE_EFFECTS (yyval.ttype) = 1;
! ;
! break;}
! case 94:
! #line 659 "c-parse.y"
! {
pop_label_level ();
last_tree = COMPOUND_BODY (yyvsp[-2].ttype);
TREE_CHAIN (last_tree) = NULL_TREE;
yyval.ttype = error_mark_node;
! ;
! break;}
! case 95:
! #line 666 "c-parse.y"
! { yyval.ttype = build_function_call (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
! break;}
! case 96:
! #line 668 "c-parse.y"
! { yyval.ttype = build_va_arg (yyvsp[-3].ttype, groktypename (yyvsp[-1].ttype)); ;
! break;}
! case 97:
! #line 671 "c-parse.y"
! {
tree c;
c = fold (yyvsp[-5].ttype);
--- 3091,3122 ----
last_expr_type = void_type_node;
yyval.ttype = build1 (STMT_EXPR, last_expr_type, yyvsp[-2].ttype);
TREE_SIDE_EFFECTS (yyval.ttype) = 1;
! }
! break;
!
! case 95:
! #line 622 "c-parse.y"
! {
pop_label_level ();
last_tree = COMPOUND_BODY (yyvsp[-2].ttype);
TREE_CHAIN (last_tree) = NULL_TREE;
yyval.ttype = error_mark_node;
! }
! break;
!
! case 96:
! #line 629 "c-parse.y"
! { yyval.ttype = build_function_call (yyvsp[-3].ttype, yyvsp[-1].ttype); }
! break;
!
! case 97:
! #line 631 "c-parse.y"
! { yyval.ttype = build_va_arg (yyvsp[-3].ttype, groktypename (yyvsp[-1].ttype)); }
! break;
!
! case 98:
! #line 634 "c-parse.y"
! {
tree c;
c = fold (yyvsp[-5].ttype);
*************** case 97:
*** 2870,2880 ****
if (TREE_CODE (c) != INTEGER_CST)
error ("first argument to __builtin_choose_expr not a constant");
yyval.ttype = integer_zerop (c) ? yyvsp[-1].ttype : yyvsp[-3].ttype;
! ;
! break;}
! case 98:
! #line 681 "c-parse.y"
! {
tree e1, e2;
e1 = TYPE_MAIN_VARIANT (groktypename (yyvsp[-3].ttype));
--- 3124,3135 ----
if (TREE_CODE (c) != INTEGER_CST)
error ("first argument to __builtin_choose_expr not a constant");
yyval.ttype = integer_zerop (c) ? yyvsp[-1].ttype : yyvsp[-3].ttype;
! }
! break;
!
! case 99:
! #line 644 "c-parse.y"
! {
tree e1, e2;
e1 = TYPE_MAIN_VARIANT (groktypename (yyvsp[-3].ttype));
*************** case 98:
*** 2882,3607 ****
yyval.ttype = comptypes (e1, e2)
? build_int_2 (1, 0) : build_int_2 (0, 0);
! ;
! break;}
! case 99:
! #line 691 "c-parse.y"
! { yyval.ttype = build_array_ref (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
! break;}
! case 100:
! #line 693 "c-parse.y"
! {
yyval.ttype = build_component_ref (yyvsp[-2].ttype, yyvsp[0].ttype);
! ;
! break;}
! case 101:
! #line 697 "c-parse.y"
! {
tree expr = build_indirect_ref (yyvsp[-2].ttype, "->");
yyval.ttype = build_component_ref (expr, yyvsp[0].ttype);
! ;
! break;}
! case 102:
! #line 703 "c-parse.y"
! { yyval.ttype = build_unary_op (POSTINCREMENT_EXPR, yyvsp[-1].ttype, 0); ;
! break;}
! case 103:
! #line 705 "c-parse.y"
! { yyval.ttype = build_unary_op (POSTDECREMENT_EXPR, yyvsp[-1].ttype, 0); ;
! break;}
! case 104:
! #line 711 "c-parse.y"
! {
parsing_iso_function_signature = false; /* Reset after decls. */
! ;
! break;}
! case 105:
! #line 718 "c-parse.y"
! {
if (warn_traditional && !in_system_header
&& parsing_iso_function_signature)
warning ("traditional C rejects ISO C style function definitions");
parsing_iso_function_signature = false; /* Reset after warning. */
! ;
! break;}
! case 107:
! #line 732 "c-parse.y"
! { ;
! break;}
! case 112:
! #line 748 "c-parse.y"
! { POP_DECLSPEC_STACK; ;
! break;}
! case 113:
! #line 750 "c-parse.y"
! { POP_DECLSPEC_STACK; ;
! break;}
! case 114:
! #line 752 "c-parse.y"
! { shadow_tag_warned (yyvsp[-1].ttype, 1);
! pedwarn ("empty declaration"); ;
! break;}
! case 115:
! #line 755 "c-parse.y"
! { pedwarn ("empty declaration"); ;
! break;}
! case 116:
! #line 764 "c-parse.y"
! { ;
! break;}
! case 117:
! #line 772 "c-parse.y"
! { pending_xref_error ();
PUSH_DECLSPEC_STACK;
split_specs_attrs (yyvsp[0].ttype,
¤t_declspecs, &prefix_attributes);
! all_prefix_attributes = prefix_attributes; ;
! break;}
! case 118:
! #line 783 "c-parse.y"
! { all_prefix_attributes = chainon (yyvsp[0].ttype, prefix_attributes); ;
! break;}
! case 119:
#line 788 "c-parse.y"
! { POP_DECLSPEC_STACK; ;
! break;}
! case 120:
! #line 790 "c-parse.y"
! { POP_DECLSPEC_STACK; ;
! break;}
! case 121:
! #line 792 "c-parse.y"
! { POP_DECLSPEC_STACK; ;
! break;}
! case 122:
#line 794 "c-parse.y"
! { POP_DECLSPEC_STACK; ;
! break;}
! case 123:
! #line 796 "c-parse.y"
! { shadow_tag (yyvsp[-1].ttype); ;
! break;}
! case 124:
! #line 798 "c-parse.y"
! { RESTORE_EXT_FLAGS (yyvsp[-1].ttype); ;
! break;}
! case 125:
! #line 855 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 126:
! #line 858 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 127:
! #line 861 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 128:
! #line 867 "c-parse.y"
! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
! break;}
! case 129:
! #line 873 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 130:
! #line 876 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 131:
! #line 882 "c-parse.y"
! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, NULL_TREE);
! TREE_STATIC (yyval.ttype) = 0; ;
! break;}
! case 132:
! #line 885 "c-parse.y"
! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
! break;}
! case 133:
! #line 891 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 134:
! #line 894 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 135:
! #line 897 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 136:
! #line 900 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 137:
! #line 903 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 138:
! #line 906 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 139:
! #line 909 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 140:
! #line 915 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 141:
! #line 918 "c-parse.y"
! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
! break;}
! case 142:
! #line 921 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 143:
! #line 924 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 144:
! #line 927 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 145:
! #line 930 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 146:
! #line 936 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 147:
! #line 939 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 148:
! #line 942 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 149:
! #line 945 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 150:
! #line 948 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 151:
! #line 951 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 152:
! #line 957 "c-parse.y"
! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
! break;}
! case 153:
! #line 960 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 154:
! #line 963 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 155:
! #line 966 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 156:
! #line 969 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 157:
! #line 975 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE);
! TREE_STATIC (yyval.ttype) = 0; ;
! break;}
! case 158:
! #line 978 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 159:
! #line 981 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 160:
! #line 984 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
! break;}
! case 161:
! #line 990 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
! break;}
! case 162:
! #line 996 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
! break;}
! case 163:
! #line 1002 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
! break;}
! case 164:
! #line 1011 "c-parse.y"
! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
! break;}
! case 165:
! #line 1017 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 166:
! #line 1020 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 167:
! #line 1023 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
! break;}
! case 168:
! #line 1029 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
! break;}
! case 169:
! #line 1035 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
! break;}
! case 170:
! #line 1041 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
! break;}
! case 171:
! #line 1050 "c-parse.y"
! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
! break;}
! case 172:
! #line 1056 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 173:
! #line 1059 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 174:
! #line 1062 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 175:
! #line 1065 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 176:
! #line 1068 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 177:
! #line 1071 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 178:
! #line 1074 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
! break;}
! case 179:
! #line 1080 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
! break;}
! case 180:
! #line 1086 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
! break;}
! case 181:
! #line 1092 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
! break;}
! case 182:
! #line 1101 "c-parse.y"
! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
! break;}
! case 183:
! #line 1104 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 184:
! #line 1107 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 185:
! #line 1110 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 186:
! #line 1113 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 187:
! #line 1119 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 188:
! #line 1122 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 189:
! #line 1125 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 190:
! #line 1128 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 191:
! #line 1131 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 192:
! #line 1134 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 193:
! #line 1137 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
! break;}
! case 194:
! #line 1143 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
! break;}
! case 195:
! #line 1149 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
! break;}
! case 196:
! #line 1155 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
! break;}
! case 197:
! #line 1164 "c-parse.y"
! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
! break;}
! case 198:
#line 1167 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 199:
! #line 1170 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 200:
! #line 1173 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 201:
! #line 1176 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 258:
! #line 1264 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
! break;}
! case 259:
! #line 1266 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; ;
! break;}
! case 263:
! #line 1301 "c-parse.y"
! { OBJC_NEED_RAW_IDENTIFIER (1); ;
! break;}
! case 266:
! #line 1311 "c-parse.y"
! { /* For a typedef name, record the meaning, not the name.
In case of `foo foo, bar;'. */
! yyval.ttype = lookup_name (yyvsp[0].ttype); ;
! break;}
! case 267:
! #line 1315 "c-parse.y"
! { skip_evaluation--; yyval.ttype = TREE_TYPE (yyvsp[-1].ttype); ;
! break;}
! case 268:
! #line 1317 "c-parse.y"
! { skip_evaluation--; yyval.ttype = groktypename (yyvsp[-1].ttype); ;
! break;}
! case 273:
! #line 1334 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
! break;}
! case 274:
! #line 1336 "c-parse.y"
! { yyval.ttype = yyvsp[-1].ttype; ;
! break;}
! case 275:
! #line 1341 "c-parse.y"
! { yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1,
chainon (yyvsp[-1].ttype, all_prefix_attributes));
! start_init (yyval.ttype, yyvsp[-2].ttype, global_bindings_p ()); ;
! break;}
! case 276:
! #line 1346 "c-parse.y"
! { finish_init ();
! finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ;
! break;}
! case 277:
! #line 1349 "c-parse.y"
! { tree d = start_decl (yyvsp[-2].ttype, current_declspecs, 0,
chainon (yyvsp[0].ttype, all_prefix_attributes));
finish_decl (d, NULL_TREE, yyvsp[-1].ttype);
! ;
! break;}
! case 278:
! #line 1357 "c-parse.y"
! { yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1,
chainon (yyvsp[-1].ttype, all_prefix_attributes));
! start_init (yyval.ttype, yyvsp[-2].ttype, global_bindings_p ()); ;
! break;}
! case 279:
! #line 1362 "c-parse.y"
! { finish_init ();
! finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ;
! break;}
! case 280:
! #line 1365 "c-parse.y"
! { tree d = start_decl (yyvsp[-2].ttype, current_declspecs, 0,
chainon (yyvsp[0].ttype, all_prefix_attributes));
! finish_decl (d, NULL_TREE, yyvsp[-1].ttype); ;
! break;}
! case 281:
! #line 1373 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
! break;}
! case 282:
! #line 1375 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; ;
! break;}
! case 283:
! #line 1380 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; ;
! break;}
! case 284:
! #line 1382 "c-parse.y"
! { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ;
! break;}
! case 285:
! #line 1387 "c-parse.y"
! { yyval.ttype = yyvsp[-2].ttype; ;
! break;}
! case 286:
! #line 1392 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; ;
! break;}
! case 287:
! #line 1394 "c-parse.y"
! { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
! break;}
! case 288:
! #line 1399 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
! break;}
! case 289:
! #line 1401 "c-parse.y"
! { yyval.ttype = build_tree_list (yyvsp[0].ttype, NULL_TREE); ;
! break;}
! case 290:
! #line 1403 "c-parse.y"
! { yyval.ttype = build_tree_list (yyvsp[-3].ttype, build_tree_list (NULL_TREE, yyvsp[-1].ttype)); ;
! break;}
! case 291:
! #line 1405 "c-parse.y"
! { yyval.ttype = build_tree_list (yyvsp[-5].ttype, tree_cons (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype)); ;
! break;}
! case 292:
! #line 1407 "c-parse.y"
! { yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
! break;}
! case 300:
! #line 1430 "c-parse.y"
! { really_start_incremental_init (NULL_TREE); ;
! break;}
! case 301:
! #line 1432 "c-parse.y"
! { yyval.ttype = pop_init_level (0); ;
! break;}
! case 302:
! #line 1434 "c-parse.y"
! { yyval.ttype = error_mark_node; ;
! break;}
! case 303:
! #line 1440 "c-parse.y"
! { if (pedantic)
! pedwarn ("ISO C forbids empty initializer braces"); ;
! break;}
! case 307:
! #line 1454 "c-parse.y"
! { if (pedantic && ! flag_isoc99)
! pedwarn ("ISO C89 forbids specifying subobject to initialize"); ;
! break;}
! case 308:
! #line 1457 "c-parse.y"
! { if (pedantic)
! pedwarn ("obsolete use of designated initializer without `='"); ;
! break;}
! case 309:
! #line 1460 "c-parse.y"
! { set_init_label (yyvsp[-1].ttype);
if (pedantic)
! pedwarn ("obsolete use of designated initializer with `:'"); ;
! break;}
! case 310:
! #line 1464 "c-parse.y"
! {;
! break;}
! case 312:
! #line 1470 "c-parse.y"
! { push_init_level (0); ;
! break;}
! case 313:
! #line 1472 "c-parse.y"
! { process_init_element (pop_init_level (0)); ;
! break;}
! case 314:
! #line 1474 "c-parse.y"
! { process_init_element (yyvsp[0].ttype); ;
! break;}
! case 318:
! #line 1485 "c-parse.y"
! { set_init_label (yyvsp[0].ttype); ;
! break;}
! case 319:
! #line 1487 "c-parse.y"
! { set_init_index (yyvsp[-3].ttype, yyvsp[-1].ttype);
if (pedantic)
! pedwarn ("ISO C forbids specifying range of elements to initialize"); ;
! break;}
! case 320:
! #line 1491 "c-parse.y"
! { set_init_index (yyvsp[-1].ttype, NULL_TREE); ;
! break;}
! case 321:
! #line 1496 "c-parse.y"
! { if (pedantic)
pedwarn ("ISO C forbids nested functions");
push_function_context ();
--- 3137,4001 ----
yyval.ttype = comptypes (e1, e2)
? build_int_2 (1, 0) : build_int_2 (0, 0);
! }
! break;
!
! case 100:
! #line 654 "c-parse.y"
! { yyval.ttype = build_array_ref (yyvsp[-3].ttype, yyvsp[-1].ttype); }
! break;
!
! case 101:
! #line 656 "c-parse.y"
! {
yyval.ttype = build_component_ref (yyvsp[-2].ttype, yyvsp[0].ttype);
! }
! break;
!
! case 102:
! #line 660 "c-parse.y"
! {
tree expr = build_indirect_ref (yyvsp[-2].ttype, "->");
yyval.ttype = build_component_ref (expr, yyvsp[0].ttype);
! }
! break;
!
! case 103:
! #line 666 "c-parse.y"
! { yyval.ttype = build_unary_op (POSTINCREMENT_EXPR, yyvsp[-1].ttype, 0); }
! break;
!
! case 104:
! #line 668 "c-parse.y"
! { yyval.ttype = build_unary_op (POSTDECREMENT_EXPR, yyvsp[-1].ttype, 0); }
! break;
!
! case 105:
! #line 674 "c-parse.y"
! {
parsing_iso_function_signature = false; /* Reset after decls. */
! }
! break;
!
! case 106:
! #line 681 "c-parse.y"
! {
if (warn_traditional && !in_system_header
&& parsing_iso_function_signature)
warning ("traditional C rejects ISO C style function definitions");
parsing_iso_function_signature = false; /* Reset after warning. */
! }
! break;
!
! case 108:
! #line 693 "c-parse.y"
! { }
! break;
!
! case 113:
! #line 706 "c-parse.y"
! { POP_DECLSPEC_STACK; }
! break;
!
! case 114:
! #line 708 "c-parse.y"
! { POP_DECLSPEC_STACK; }
! break;
!
! case 115:
! #line 710 "c-parse.y"
! { shadow_tag_warned (yyvsp[-1].ttype, 1);
! pedwarn ("empty declaration"); }
! break;
!
! case 116:
! #line 713 "c-parse.y"
! { pedwarn ("empty declaration"); }
! break;
!
! case 117:
! #line 719 "c-parse.y"
! { }
! break;
!
! case 118:
! #line 724 "c-parse.y"
! { pending_xref_error ();
PUSH_DECLSPEC_STACK;
split_specs_attrs (yyvsp[0].ttype,
¤t_declspecs, &prefix_attributes);
! all_prefix_attributes = prefix_attributes; }
! break;
!
! case 119:
! #line 734 "c-parse.y"
! { all_prefix_attributes = chainon (yyvsp[0].ttype, prefix_attributes); }
! break;
!
! case 120:
! #line 739 "c-parse.y"
! { POP_DECLSPEC_STACK; }
! break;
!
! case 121:
! #line 741 "c-parse.y"
! { POP_DECLSPEC_STACK; }
! break;
!
! case 122:
! #line 743 "c-parse.y"
! { POP_DECLSPEC_STACK; }
! break;
!
! case 123:
! #line 745 "c-parse.y"
! { POP_DECLSPEC_STACK; }
! break;
!
! case 124:
! #line 747 "c-parse.y"
! { shadow_tag (yyvsp[-1].ttype); }
! break;
!
! case 125:
! #line 749 "c-parse.y"
! { RESTORE_EXT_FLAGS (yyvsp[-1].ttype); }
! break;
!
! case 126:
! #line 758 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 127:
! #line 761 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 128:
! #line 764 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 129:
! #line 770 "c-parse.y"
! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); }
! break;
!
! case 130:
! #line 776 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 131:
! #line 779 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 132:
! #line 785 "c-parse.y"
! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, NULL_TREE);
! TREE_STATIC (yyval.ttype) = 0; }
! break;
!
! case 133:
#line 788 "c-parse.y"
! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); }
! break;
!
! case 134:
#line 794 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 135:
! #line 797 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 136:
! #line 800 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 137:
! #line 803 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 138:
! #line 806 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 139:
! #line 809 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 140:
! #line 812 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 141:
! #line 818 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 142:
! #line 821 "c-parse.y"
! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); }
! break;
!
! case 143:
! #line 824 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 144:
! #line 827 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 145:
! #line 830 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 146:
! #line 833 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 147:
! #line 839 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 148:
! #line 842 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 149:
! #line 845 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 150:
! #line 848 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 151:
! #line 851 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 152:
! #line 854 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 153:
! #line 860 "c-parse.y"
! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); }
! break;
!
! case 154:
! #line 863 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 155:
! #line 866 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 156:
! #line 869 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 157:
! #line 872 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 158:
! #line 878 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE);
! TREE_STATIC (yyval.ttype) = 0; }
! break;
!
! case 159:
! #line 881 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 160:
! #line 884 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 161:
! #line 887 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); }
! break;
!
! case 162:
! #line 893 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); }
! break;
!
! case 163:
! #line 899 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); }
! break;
!
! case 164:
! #line 905 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); }
! break;
!
! case 165:
! #line 914 "c-parse.y"
! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); }
! break;
!
! case 166:
! #line 920 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 167:
! #line 923 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 168:
! #line 926 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); }
! break;
!
! case 169:
! #line 932 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); }
! break;
!
! case 170:
! #line 938 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); }
! break;
!
! case 171:
! #line 944 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); }
! break;
!
! case 172:
! #line 953 "c-parse.y"
! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); }
! break;
!
! case 173:
! #line 959 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 174:
! #line 962 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 175:
! #line 965 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 176:
! #line 968 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 177:
! #line 971 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 178:
! #line 974 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 179:
! #line 977 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); }
! break;
!
! case 180:
! #line 983 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); }
! break;
!
! case 181:
! #line 989 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); }
! break;
!
! case 182:
! #line 995 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); }
! break;
!
! case 183:
! #line 1004 "c-parse.y"
! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); }
! break;
!
! case 184:
! #line 1007 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 185:
! #line 1010 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 186:
! #line 1013 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 187:
! #line 1016 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 188:
! #line 1022 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 189:
! #line 1025 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 190:
! #line 1028 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 191:
! #line 1031 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 192:
! #line 1034 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 193:
! #line 1037 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 194:
! #line 1040 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); }
! break;
!
! case 195:
! #line 1046 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); }
! break;
!
! case 196:
! #line 1052 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); }
! break;
!
! case 197:
! #line 1058 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); }
! break;
!
! case 198:
! #line 1067 "c-parse.y"
! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); }
! break;
!
! case 199:
! #line 1070 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 200:
! #line 1073 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 201:
! #line 1076 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 202:
! #line 1079 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; }
! break;
!
! case 259:
#line 1167 "c-parse.y"
! { yyval.ttype = NULL_TREE; }
! break;
!
! case 260:
! #line 1169 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; }
! break;
!
! case 264:
! #line 1185 "c-parse.y"
! { OBJC_NEED_RAW_IDENTIFIER (1); }
! break;
!
! case 267:
! #line 1195 "c-parse.y"
! { /* For a typedef name, record the meaning, not the name.
In case of `foo foo, bar;'. */
! yyval.ttype = lookup_name (yyvsp[0].ttype); }
! break;
!
! case 268:
! #line 1199 "c-parse.y"
! { skip_evaluation--; yyval.ttype = TREE_TYPE (yyvsp[-1].ttype); }
! break;
!
! case 269:
! #line 1201 "c-parse.y"
! { skip_evaluation--; yyval.ttype = groktypename (yyvsp[-1].ttype); }
! break;
!
! case 274:
! #line 1218 "c-parse.y"
! { yyval.ttype = NULL_TREE; }
! break;
!
! case 275:
! #line 1220 "c-parse.y"
! { yyval.ttype = yyvsp[-1].ttype; }
! break;
!
! case 276:
! #line 1225 "c-parse.y"
! { yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1,
chainon (yyvsp[-1].ttype, all_prefix_attributes));
! start_init (yyval.ttype, yyvsp[-2].ttype, global_bindings_p ()); }
! break;
!
! case 277:
! #line 1230 "c-parse.y"
! { finish_init ();
! finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); }
! break;
!
! case 278:
! #line 1233 "c-parse.y"
! { tree d = start_decl (yyvsp[-2].ttype, current_declspecs, 0,
chainon (yyvsp[0].ttype, all_prefix_attributes));
finish_decl (d, NULL_TREE, yyvsp[-1].ttype);
! }
! break;
!
! case 279:
! #line 1241 "c-parse.y"
! { yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1,
chainon (yyvsp[-1].ttype, all_prefix_attributes));
! start_init (yyval.ttype, yyvsp[-2].ttype, global_bindings_p ()); }
! break;
!
! case 280:
! #line 1246 "c-parse.y"
! { finish_init ();
! finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); }
! break;
!
! case 281:
! #line 1249 "c-parse.y"
! { tree d = start_decl (yyvsp[-2].ttype, current_declspecs, 0,
chainon (yyvsp[0].ttype, all_prefix_attributes));
! finish_decl (d, NULL_TREE, yyvsp[-1].ttype); }
! break;
!
! case 282:
! #line 1256 "c-parse.y"
! { yyval.ttype = NULL_TREE; }
! break;
!
! case 283:
! #line 1258 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; }
! break;
!
! case 284:
! #line 1263 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; }
! break;
!
! case 285:
! #line 1265 "c-parse.y"
! { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); }
! break;
!
! case 286:
! #line 1270 "c-parse.y"
! { yyval.ttype = yyvsp[-2].ttype; }
! break;
!
! case 287:
! #line 1275 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; }
! break;
!
! case 288:
! #line 1277 "c-parse.y"
! { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); }
! break;
!
! case 289:
! #line 1282 "c-parse.y"
! { yyval.ttype = NULL_TREE; }
! break;
!
! case 290:
! #line 1284 "c-parse.y"
! { yyval.ttype = build_tree_list (yyvsp[0].ttype, NULL_TREE); }
! break;
!
! case 291:
! #line 1286 "c-parse.y"
! { yyval.ttype = build_tree_list (yyvsp[-3].ttype, build_tree_list (NULL_TREE, yyvsp[-1].ttype)); }
! break;
!
! case 292:
! #line 1288 "c-parse.y"
! { yyval.ttype = build_tree_list (yyvsp[-5].ttype, tree_cons (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype)); }
! break;
!
! case 293:
! #line 1290 "c-parse.y"
! { yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); }
! break;
!
! case 301:
! #line 1312 "c-parse.y"
! { really_start_incremental_init (NULL_TREE); }
! break;
!
! case 302:
! #line 1314 "c-parse.y"
! { yyval.ttype = pop_init_level (0); }
! break;
!
! case 303:
! #line 1316 "c-parse.y"
! { yyval.ttype = error_mark_node; }
! break;
!
! case 304:
! #line 1322 "c-parse.y"
! { if (pedantic)
! pedwarn ("ISO C forbids empty initializer braces"); }
! break;
!
! case 308:
! #line 1335 "c-parse.y"
! { if (pedantic && ! flag_isoc99)
! pedwarn ("ISO C89 forbids specifying subobject to initialize"); }
! break;
!
! case 309:
! #line 1338 "c-parse.y"
! { if (pedantic)
! pedwarn ("obsolete use of designated initializer without `='"); }
! break;
!
! case 310:
! #line 1341 "c-parse.y"
! { set_init_label (yyvsp[-1].ttype);
if (pedantic)
! pedwarn ("obsolete use of designated initializer with `:'"); }
! break;
!
! case 311:
! #line 1345 "c-parse.y"
! {}
! break;
!
! case 313:
! #line 1351 "c-parse.y"
! { push_init_level (0); }
! break;
!
! case 314:
! #line 1353 "c-parse.y"
! { process_init_element (pop_init_level (0)); }
! break;
!
! case 315:
! #line 1355 "c-parse.y"
! { process_init_element (yyvsp[0].ttype); }
! break;
!
! case 319:
! #line 1366 "c-parse.y"
! { set_init_label (yyvsp[0].ttype); }
! break;
!
! case 320:
! #line 1368 "c-parse.y"
! { set_init_index (yyvsp[-3].ttype, yyvsp[-1].ttype);
if (pedantic)
! pedwarn ("ISO C forbids specifying range of elements to initialize"); }
! break;
!
! case 321:
! #line 1372 "c-parse.y"
! { set_init_index (yyvsp[-1].ttype, NULL_TREE); }
! break;
!
! case 322:
! #line 1377 "c-parse.y"
! { if (pedantic)
pedwarn ("ISO C forbids nested functions");
push_function_context ();
*************** case 321:
*** 3612,3635 ****
YYERROR1;
}
parsing_iso_function_signature = false; /* Don't warn about nested functions. */
! ;
! break;}
! case 322:
! #line 1509 "c-parse.y"
! { store_parm_decls (); ;
! break;}
! case 323:
! #line 1517 "c-parse.y"
! { tree decl = current_function_decl;
DECL_SOURCE_FILE (decl) = yyvsp[-2].filename;
DECL_SOURCE_LINE (decl) = yyvsp[-1].lineno;
finish_function (1, 1);
pop_function_context ();
! add_decl_stmt (decl); ;
! break;}
! case 324:
! #line 1527 "c-parse.y"
! { if (pedantic)
pedwarn ("ISO C forbids nested functions");
push_function_context ();
--- 4006,4032 ----
YYERROR1;
}
parsing_iso_function_signature = false; /* Don't warn about nested functions. */
! }
! break;
!
! case 323:
! #line 1390 "c-parse.y"
! { store_parm_decls (); }
! break;
!
! case 324:
! #line 1393 "c-parse.y"
! { tree decl = current_function_decl;
DECL_SOURCE_FILE (decl) = yyvsp[-2].filename;
DECL_SOURCE_LINE (decl) = yyvsp[-1].lineno;
finish_function (1, 1);
pop_function_context ();
! add_decl_stmt (decl); }
! break;
!
! case 325:
! #line 1403 "c-parse.y"
! { if (pedantic)
pedwarn ("ISO C forbids nested functions");
push_function_context ();
*************** case 324:
*** 3640,3843 ****
YYERROR1;
}
parsing_iso_function_signature = false; /* Don't warn about nested functions. */
! ;
! break;}
! case 325:
! #line 1540 "c-parse.y"
! { store_parm_decls (); ;
! break;}
! case 326:
! #line 1548 "c-parse.y"
! { tree decl = current_function_decl;
DECL_SOURCE_FILE (decl) = yyvsp[-2].filename;
DECL_SOURCE_LINE (decl) = yyvsp[-1].lineno;
finish_function (1, 1);
pop_function_context ();
! add_decl_stmt (decl); ;
! break;}
! case 329:
! #line 1568 "c-parse.y"
! { yyval.ttype = yyvsp[-2].ttype ? tree_cons (yyvsp[-2].ttype, yyvsp[-1].ttype, NULL_TREE) : yyvsp[-1].ttype; ;
! break;}
! case 330:
! #line 1570 "c-parse.y"
! { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
! break;}
! case 331:
! #line 1575 "c-parse.y"
! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); ;
! break;}
! case 332:
! #line 1577 "c-parse.y"
! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
! break;}
! case 336:
! #line 1592 "c-parse.y"
! { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
! break;}
! case 337:
! #line 1597 "c-parse.y"
! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); ;
! break;}
! case 339:
! #line 1603 "c-parse.y"
! { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
! break;}
! case 340:
! #line 1608 "c-parse.y"
! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); ;
! break;}
! case 341:
! #line 1610 "c-parse.y"
! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
! break;}
! case 342:
! #line 1612 "c-parse.y"
! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
! break;}
! case 343:
! #line 1614 "c-parse.y"
! { yyval.ttype = yyvsp[-2].ttype ? tree_cons (yyvsp[-2].ttype, yyvsp[-1].ttype, NULL_TREE) : yyvsp[-1].ttype; ;
! break;}
! case 344:
! #line 1622 "c-parse.y"
! { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
! break;}
! case 345:
! #line 1627 "c-parse.y"
! { yyval.ttype = yyvsp[-2].ttype ? tree_cons (yyvsp[-2].ttype, yyvsp[-1].ttype, NULL_TREE) : yyvsp[-1].ttype; ;
! break;}
! case 346:
! #line 1629 "c-parse.y"
! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
! break;}
! case 347:
! #line 1631 "c-parse.y"
! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); ;
! break;}
! case 349:
! #line 1637 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
! break;}
! case 350:
! #line 1639 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; ;
! break;}
! case 351:
! #line 1644 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
! break;}
! case 352:
! #line 1646 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; ;
! break;}
! case 353:
! #line 1651 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
! break;}
! case 354:
! #line 1653 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; ;
! break;}
! case 355:
! #line 1664 "c-parse.y"
! { yyval.ttype = start_struct (RECORD_TYPE, yyvsp[-1].ttype);
/* Start scope of tag before parsing components. */
! ;
! break;}
! case 356:
! #line 1668 "c-parse.y"
! { yyval.ttype = finish_struct (yyvsp[-3].ttype, yyvsp[-2].ttype, chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); ;
! break;}
! case 357:
! #line 1670 "c-parse.y"
! { yyval.ttype = finish_struct (start_struct (RECORD_TYPE, NULL_TREE),
yyvsp[-2].ttype, chainon (yyvsp[-4].ttype, yyvsp[0].ttype));
! ;
! break;}
! case 358:
! #line 1674 "c-parse.y"
! { yyval.ttype = start_struct (UNION_TYPE, yyvsp[-1].ttype); ;
! break;}
! case 359:
! #line 1676 "c-parse.y"
! { yyval.ttype = finish_struct (yyvsp[-3].ttype, yyvsp[-2].ttype, chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); ;
! break;}
! case 360:
! #line 1678 "c-parse.y"
! { yyval.ttype = finish_struct (start_struct (UNION_TYPE, NULL_TREE),
yyvsp[-2].ttype, chainon (yyvsp[-4].ttype, yyvsp[0].ttype));
! ;
! break;}
! case 361:
! #line 1682 "c-parse.y"
! { yyval.ttype = start_enum (yyvsp[-1].ttype); ;
! break;}
! case 362:
! #line 1684 "c-parse.y"
! { yyval.ttype = finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype),
! chainon (yyvsp[-7].ttype, yyvsp[0].ttype)); ;
! break;}
! case 363:
! #line 1687 "c-parse.y"
! { yyval.ttype = start_enum (NULL_TREE); ;
! break;}
! case 364:
! #line 1689 "c-parse.y"
! { yyval.ttype = finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype),
! chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); ;
! break;}
! case 365:
! #line 1695 "c-parse.y"
! { yyval.ttype = xref_tag (RECORD_TYPE, yyvsp[0].ttype); ;
! break;}
! case 366:
! #line 1697 "c-parse.y"
! { yyval.ttype = xref_tag (UNION_TYPE, yyvsp[0].ttype); ;
! break;}
! case 367:
! #line 1699 "c-parse.y"
! { yyval.ttype = xref_tag (ENUMERAL_TYPE, yyvsp[0].ttype);
/* In ISO C, enumerated types can be referred to
only if already defined. */
if (pedantic && !COMPLETE_TYPE_P (yyval.ttype))
! pedwarn ("ISO C forbids forward references to `enum' types"); ;
! break;}
! case 371:
! #line 1714 "c-parse.y"
! { if (pedantic && ! flag_isoc99)
! pedwarn ("comma at end of enumerator list"); ;
! break;}
! case 372:
! #line 1720 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; ;
! break;}
! case 373:
! #line 1722 "c-parse.y"
! { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype);
! pedwarn ("no semicolon at end of struct or union"); ;
! break;}
! case 374:
! #line 1727 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
! break;}
! case 375:
! #line 1729 "c-parse.y"
! { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
! break;}
! case 376:
! #line 1731 "c-parse.y"
! { if (pedantic)
! pedwarn ("extra semicolon in struct or union specified"); ;
! break;}
! case 377:
! #line 1737 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype;
! POP_DECLSPEC_STACK; ;
! break;}
! case 378:
! #line 1740 "c-parse.y"
! {
/* Support for unnamed structs or unions as members of
structs or unions (which is [a] useful and [b] supports
MS P-SDK). */
--- 4037,4284 ----
YYERROR1;
}
parsing_iso_function_signature = false; /* Don't warn about nested functions. */
! }
! break;
!
! case 326:
! #line 1416 "c-parse.y"
! { store_parm_decls (); }
! break;
!
! case 327:
! #line 1419 "c-parse.y"
! { tree decl = current_function_decl;
DECL_SOURCE_FILE (decl) = yyvsp[-2].filename;
DECL_SOURCE_LINE (decl) = yyvsp[-1].lineno;
finish_function (1, 1);
pop_function_context ();
! add_decl_stmt (decl); }
! break;
!
! case 330:
! #line 1438 "c-parse.y"
! { yyval.ttype = yyvsp[-2].ttype ? tree_cons (yyvsp[-2].ttype, yyvsp[-1].ttype, NULL_TREE) : yyvsp[-1].ttype; }
! break;
!
! case 331:
! #line 1440 "c-parse.y"
! { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); }
! break;
!
! case 332:
! #line 1443 "c-parse.y"
! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); }
! break;
!
! case 333:
! #line 1445 "c-parse.y"
! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); }
! break;
!
! case 337:
! #line 1457 "c-parse.y"
! { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); }
! break;
!
! case 338:
! #line 1460 "c-parse.y"
! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); }
! break;
!
! case 340:
! #line 1466 "c-parse.y"
! { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); }
! break;
!
! case 341:
! #line 1469 "c-parse.y"
! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); }
! break;
!
! case 342:
! #line 1471 "c-parse.y"
! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); }
! break;
!
! case 343:
! #line 1473 "c-parse.y"
! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); }
! break;
!
! case 344:
! #line 1475 "c-parse.y"
! { yyval.ttype = yyvsp[-2].ttype ? tree_cons (yyvsp[-2].ttype, yyvsp[-1].ttype, NULL_TREE) : yyvsp[-1].ttype; }
! break;
!
! case 345:
! #line 1482 "c-parse.y"
! { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); }
! break;
!
! case 346:
! #line 1485 "c-parse.y"
! { yyval.ttype = yyvsp[-2].ttype ? tree_cons (yyvsp[-2].ttype, yyvsp[-1].ttype, NULL_TREE) : yyvsp[-1].ttype; }
! break;
!
! case 347:
! #line 1487 "c-parse.y"
! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); }
! break;
!
! case 348:
! #line 1489 "c-parse.y"
! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); }
! break;
!
! case 350:
! #line 1495 "c-parse.y"
! { yyval.ttype = NULL_TREE; }
! break;
!
! case 351:
! #line 1497 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; }
! break;
!
! case 352:
! #line 1502 "c-parse.y"
! { yyval.ttype = NULL_TREE; }
! break;
!
! case 353:
! #line 1504 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; }
! break;
!
! case 354:
! #line 1509 "c-parse.y"
! { yyval.ttype = NULL_TREE; }
! break;
!
! case 355:
! #line 1511 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; }
! break;
!
! case 356:
! #line 1518 "c-parse.y"
! { yyval.ttype = start_struct (RECORD_TYPE, yyvsp[-1].ttype);
/* Start scope of tag before parsing components. */
! }
! break;
!
! case 357:
! #line 1522 "c-parse.y"
! { yyval.ttype = finish_struct (yyvsp[-3].ttype, yyvsp[-2].ttype, chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); }
! break;
!
! case 358:
! #line 1524 "c-parse.y"
! { yyval.ttype = finish_struct (start_struct (RECORD_TYPE, NULL_TREE),
yyvsp[-2].ttype, chainon (yyvsp[-4].ttype, yyvsp[0].ttype));
! }
! break;
!
! case 359:
! #line 1528 "c-parse.y"
! { yyval.ttype = start_struct (UNION_TYPE, yyvsp[-1].ttype); }
! break;
!
! case 360:
! #line 1530 "c-parse.y"
! { yyval.ttype = finish_struct (yyvsp[-3].ttype, yyvsp[-2].ttype, chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); }
! break;
!
! case 361:
! #line 1532 "c-parse.y"
! { yyval.ttype = finish_struct (start_struct (UNION_TYPE, NULL_TREE),
yyvsp[-2].ttype, chainon (yyvsp[-4].ttype, yyvsp[0].ttype));
! }
! break;
!
! case 362:
! #line 1536 "c-parse.y"
! { yyval.ttype = start_enum (yyvsp[-1].ttype); }
! break;
!
! case 363:
! #line 1538 "c-parse.y"
! { yyval.ttype = finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype),
! chainon (yyvsp[-7].ttype, yyvsp[0].ttype)); }
! break;
!
! case 364:
! #line 1541 "c-parse.y"
! { yyval.ttype = start_enum (NULL_TREE); }
! break;
!
! case 365:
! #line 1543 "c-parse.y"
! { yyval.ttype = finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype),
! chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); }
! break;
!
! case 366:
! #line 1549 "c-parse.y"
! { yyval.ttype = xref_tag (RECORD_TYPE, yyvsp[0].ttype); }
! break;
!
! case 367:
! #line 1551 "c-parse.y"
! { yyval.ttype = xref_tag (UNION_TYPE, yyvsp[0].ttype); }
! break;
!
! case 368:
! #line 1553 "c-parse.y"
! { yyval.ttype = xref_tag (ENUMERAL_TYPE, yyvsp[0].ttype);
/* In ISO C, enumerated types can be referred to
only if already defined. */
if (pedantic && !COMPLETE_TYPE_P (yyval.ttype))
! pedwarn ("ISO C forbids forward references to `enum' types"); }
! break;
!
! case 372:
! #line 1568 "c-parse.y"
! { if (pedantic && ! flag_isoc99)
! pedwarn ("comma at end of enumerator list"); }
! break;
!
! case 373:
! #line 1574 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; }
! break;
!
! case 374:
! #line 1576 "c-parse.y"
! { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype);
! pedwarn ("no semicolon at end of struct or union"); }
! break;
!
! case 375:
! #line 1581 "c-parse.y"
! { yyval.ttype = NULL_TREE; }
! break;
!
! case 376:
! #line 1583 "c-parse.y"
! { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[-1].ttype); }
! break;
!
! case 377:
! #line 1585 "c-parse.y"
! { if (pedantic)
! pedwarn ("extra semicolon in struct or union specified"); }
! break;
!
! case 378:
! #line 1591 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype;
! POP_DECLSPEC_STACK; }
! break;
!
! case 379:
! #line 1594 "c-parse.y"
! {
/* Support for unnamed structs or unions as members of
structs or unions (which is [a] useful and [b] supports
MS P-SDK). */
*************** case 378:
*** 3845,4038 ****
pedwarn ("ISO C doesn't support unnamed structs/unions");
yyval.ttype = grokfield(yyvsp[-1].filename, yyvsp[0].lineno, NULL, current_declspecs, NULL_TREE);
! POP_DECLSPEC_STACK; ;
! break;}
! case 379:
! #line 1750 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype;
! POP_DECLSPEC_STACK; ;
! break;}
! case 380:
! #line 1753 "c-parse.y"
! { if (pedantic)
pedwarn ("ISO C forbids member declarations with no members");
shadow_tag(yyvsp[0].ttype);
! yyval.ttype = NULL_TREE; ;
! break;}
! case 381:
! #line 1758 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
! break;}
! case 382:
! #line 1760 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype;
! RESTORE_EXT_FLAGS (yyvsp[-1].ttype); ;
! break;}
! case 384:
! #line 1767 "c-parse.y"
! { yyval.ttype = chainon (yyvsp[-3].ttype, yyvsp[0].ttype); ;
! break;}
! case 386:
! #line 1773 "c-parse.y"
! { yyval.ttype = chainon (yyvsp[-3].ttype, yyvsp[0].ttype); ;
! break;}
! case 387:
! #line 1778 "c-parse.y"
! { yyval.ttype = grokfield (yyvsp[-3].filename, yyvsp[-2].lineno, yyvsp[-1].ttype, current_declspecs, NULL_TREE);
! decl_attributes (&yyval.ttype, chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;
! break;}
! case 388:
! #line 1782 "c-parse.y"
! { yyval.ttype = grokfield (yyvsp[-5].filename, yyvsp[-4].lineno, yyvsp[-3].ttype, current_declspecs, yyvsp[-1].ttype);
! decl_attributes (&yyval.ttype, chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;
! break;}
! case 389:
! #line 1785 "c-parse.y"
! { yyval.ttype = grokfield (yyvsp[-4].filename, yyvsp[-3].lineno, NULL_TREE, current_declspecs, yyvsp[-1].ttype);
! decl_attributes (&yyval.ttype, chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;
! break;}
! case 390:
! #line 1791 "c-parse.y"
! { yyval.ttype = grokfield (yyvsp[-3].filename, yyvsp[-2].lineno, yyvsp[-1].ttype, current_declspecs, NULL_TREE);
! decl_attributes (&yyval.ttype, chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;
! break;}
! case 391:
! #line 1795 "c-parse.y"
! { yyval.ttype = grokfield (yyvsp[-5].filename, yyvsp[-4].lineno, yyvsp[-3].ttype, current_declspecs, yyvsp[-1].ttype);
! decl_attributes (&yyval.ttype, chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;
! break;}
! case 392:
! #line 1798 "c-parse.y"
! { yyval.ttype = grokfield (yyvsp[-4].filename, yyvsp[-3].lineno, NULL_TREE, current_declspecs, yyvsp[-1].ttype);
! decl_attributes (&yyval.ttype, chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;
! break;}
! case 394:
! #line 1810 "c-parse.y"
! { if (yyvsp[-2].ttype == error_mark_node)
yyval.ttype = yyvsp[-2].ttype;
else
! yyval.ttype = chainon (yyvsp[0].ttype, yyvsp[-2].ttype); ;
! break;}
! case 395:
! #line 1815 "c-parse.y"
! { yyval.ttype = error_mark_node; ;
! break;}
! case 396:
! #line 1821 "c-parse.y"
! { yyval.ttype = build_enumerator (yyvsp[0].ttype, NULL_TREE); ;
! break;}
! case 397:
! #line 1823 "c-parse.y"
! { yyval.ttype = build_enumerator (yyvsp[-2].ttype, yyvsp[0].ttype); ;
! break;}
! case 398:
! #line 1828 "c-parse.y"
! { pending_xref_error ();
! yyval.ttype = yyvsp[0].ttype; ;
! break;}
! case 399:
! #line 1831 "c-parse.y"
! { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
! break;}
! case 400:
! #line 1836 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
! break;}
! case 402:
! #line 1842 "c-parse.y"
! { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
NULL_TREE),
! all_prefix_attributes); ;
! break;}
! case 403:
! #line 1846 "c-parse.y"
! { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
yyvsp[0].ttype),
! all_prefix_attributes); ;
! break;}
! case 404:
! #line 1850 "c-parse.y"
! { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
yyvsp[-1].ttype),
! chainon (yyvsp[0].ttype, all_prefix_attributes)); ;
! break;}
! case 408:
! #line 1863 "c-parse.y"
! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
! break;}
! case 409:
! #line 1868 "c-parse.y"
! { yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); ;
! break;}
! case 410:
! #line 1870 "c-parse.y"
! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
! break;}
! case 411:
! #line 1875 "c-parse.y"
! { yyval.ttype = yyvsp[-2].ttype ? tree_cons (yyvsp[-2].ttype, yyvsp[-1].ttype, NULL_TREE) : yyvsp[-1].ttype; ;
! break;}
! case 412:
! #line 1877 "c-parse.y"
! { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
! break;}
! case 413:
! #line 1879 "c-parse.y"
! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 1); ;
! break;}
! case 414:
! #line 1881 "c-parse.y"
! { yyval.ttype = build_nt (CALL_EXPR, NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
! break;}
! case 415:
! #line 1883 "c-parse.y"
! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, NULL_TREE, 1); ;
! break;}
! case 416:
! #line 1890 "c-parse.y"
! { yyval.ttype = build_array_declarator (yyvsp[-1].ttype, yyvsp[-2].ttype, 0, 0); ;
! break;}
! case 417:
! #line 1892 "c-parse.y"
! { yyval.ttype = build_array_declarator (NULL_TREE, yyvsp[-1].ttype, 0, 0); ;
! break;}
! case 418:
! #line 1894 "c-parse.y"
! { yyval.ttype = build_array_declarator (NULL_TREE, yyvsp[-2].ttype, 0, 1); ;
! break;}
! case 419:
! #line 1896 "c-parse.y"
! { yyval.ttype = build_array_declarator (yyvsp[-1].ttype, yyvsp[-2].ttype, 1, 0); ;
! break;}
! case 420:
! #line 1899 "c-parse.y"
! { yyval.ttype = build_array_declarator (yyvsp[-1].ttype, yyvsp[-3].ttype, 1, 0); ;
! break;}
! case 423:
! #line 1912 "c-parse.y"
! {
pedwarn ("deprecated use of label at end of compound statement");
! ;
! break;}
! case 431:
! #line 1929 "c-parse.y"
! { if (pedantic && !flag_isoc99)
! pedwarn ("ISO C89 forbids mixed declarations and code"); ;
! break;}
! case 446:
! #line 1959 "c-parse.y"
! { pushlevel (0);
clear_last_expr ();
add_scope_stmt (/*begin_p=*/1, /*partial_p=*/0);
! ;
! break;}
! case 447:
! #line 1966 "c-parse.y"
! { yyval.ttype = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/0); ;
! break;}
! case 448:
! #line 1971 "c-parse.y"
! { if (flag_isoc99)
{
yyval.ttype = c_begin_compound_stmt ();
pushlevel (0);
--- 4286,4519 ----
pedwarn ("ISO C doesn't support unnamed structs/unions");
yyval.ttype = grokfield(yyvsp[-1].filename, yyvsp[0].lineno, NULL, current_declspecs, NULL_TREE);
! POP_DECLSPEC_STACK; }
! break;
!
! case 380:
! #line 1604 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype;
! POP_DECLSPEC_STACK; }
! break;
!
! case 381:
! #line 1607 "c-parse.y"
! { if (pedantic)
pedwarn ("ISO C forbids member declarations with no members");
shadow_tag(yyvsp[0].ttype);
! yyval.ttype = NULL_TREE; }
! break;
!
! case 382:
! #line 1612 "c-parse.y"
! { yyval.ttype = NULL_TREE; }
! break;
!
! case 383:
! #line 1614 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype;
! RESTORE_EXT_FLAGS (yyvsp[-1].ttype); }
! break;
!
! case 385:
! #line 1621 "c-parse.y"
! { yyval.ttype = chainon (yyvsp[-3].ttype, yyvsp[0].ttype); }
! break;
!
! case 387:
! #line 1627 "c-parse.y"
! { yyval.ttype = chainon (yyvsp[-3].ttype, yyvsp[0].ttype); }
! break;
!
! case 388:
! #line 1632 "c-parse.y"
! { yyval.ttype = grokfield (yyvsp[-3].filename, yyvsp[-2].lineno, yyvsp[-1].ttype, current_declspecs, NULL_TREE);
! decl_attributes (&yyval.ttype, chainon (yyvsp[0].ttype, all_prefix_attributes), 0); }
! break;
!
! case 389:
! #line 1636 "c-parse.y"
! { yyval.ttype = grokfield (yyvsp[-5].filename, yyvsp[-4].lineno, yyvsp[-3].ttype, current_declspecs, yyvsp[-1].ttype);
! decl_attributes (&yyval.ttype, chainon (yyvsp[0].ttype, all_prefix_attributes), 0); }
! break;
!
! case 390:
! #line 1639 "c-parse.y"
! { yyval.ttype = grokfield (yyvsp[-4].filename, yyvsp[-3].lineno, NULL_TREE, current_declspecs, yyvsp[-1].ttype);
! decl_attributes (&yyval.ttype, chainon (yyvsp[0].ttype, all_prefix_attributes), 0); }
! break;
!
! case 391:
! #line 1645 "c-parse.y"
! { yyval.ttype = grokfield (yyvsp[-3].filename, yyvsp[-2].lineno, yyvsp[-1].ttype, current_declspecs, NULL_TREE);
! decl_attributes (&yyval.ttype, chainon (yyvsp[0].ttype, all_prefix_attributes), 0); }
! break;
!
! case 392:
! #line 1649 "c-parse.y"
! { yyval.ttype = grokfield (yyvsp[-5].filename, yyvsp[-4].lineno, yyvsp[-3].ttype, current_declspecs, yyvsp[-1].ttype);
! decl_attributes (&yyval.ttype, chainon (yyvsp[0].ttype, all_prefix_attributes), 0); }
! break;
!
! case 393:
! #line 1652 "c-parse.y"
! { yyval.ttype = grokfield (yyvsp[-4].filename, yyvsp[-3].lineno, NULL_TREE, current_declspecs, yyvsp[-1].ttype);
! decl_attributes (&yyval.ttype, chainon (yyvsp[0].ttype, all_prefix_attributes), 0); }
! break;
!
! case 395:
! #line 1661 "c-parse.y"
! { if (yyvsp[-2].ttype == error_mark_node)
yyval.ttype = yyvsp[-2].ttype;
else
! yyval.ttype = chainon (yyvsp[0].ttype, yyvsp[-2].ttype); }
! break;
!
! case 396:
! #line 1666 "c-parse.y"
! { yyval.ttype = error_mark_node; }
! break;
!
! case 397:
! #line 1672 "c-parse.y"
! { yyval.ttype = build_enumerator (yyvsp[0].ttype, NULL_TREE); }
! break;
!
! case 398:
! #line 1674 "c-parse.y"
! { yyval.ttype = build_enumerator (yyvsp[-2].ttype, yyvsp[0].ttype); }
! break;
!
! case 399:
! #line 1679 "c-parse.y"
! { pending_xref_error ();
! yyval.ttype = yyvsp[0].ttype; }
! break;
!
! case 400:
! #line 1682 "c-parse.y"
! { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); }
! break;
!
! case 401:
! #line 1687 "c-parse.y"
! { yyval.ttype = NULL_TREE; }
! break;
!
! case 403:
! #line 1693 "c-parse.y"
! { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
NULL_TREE),
! all_prefix_attributes); }
! break;
!
! case 404:
! #line 1697 "c-parse.y"
! { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
yyvsp[0].ttype),
! all_prefix_attributes); }
! break;
!
! case 405:
! #line 1701 "c-parse.y"
! { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
yyvsp[-1].ttype),
! chainon (yyvsp[0].ttype, all_prefix_attributes)); }
! break;
!
! case 409:
! #line 1714 "c-parse.y"
! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); }
! break;
!
! case 410:
! #line 1719 "c-parse.y"
! { yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); }
! break;
!
! case 411:
! #line 1721 "c-parse.y"
! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); }
! break;
!
! case 412:
! #line 1726 "c-parse.y"
! { yyval.ttype = yyvsp[-2].ttype ? tree_cons (yyvsp[-2].ttype, yyvsp[-1].ttype, NULL_TREE) : yyvsp[-1].ttype; }
! break;
!
! case 413:
! #line 1728 "c-parse.y"
! { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); }
! break;
!
! case 414:
! #line 1730 "c-parse.y"
! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 1); }
! break;
!
! case 415:
! #line 1732 "c-parse.y"
! { yyval.ttype = build_nt (CALL_EXPR, NULL_TREE, yyvsp[0].ttype, NULL_TREE); }
! break;
!
! case 416:
! #line 1734 "c-parse.y"
! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, NULL_TREE, 1); }
! break;
!
! case 417:
! #line 1741 "c-parse.y"
! { yyval.ttype = build_array_declarator (yyvsp[-1].ttype, yyvsp[-2].ttype, 0, 0); }
! break;
!
! case 418:
! #line 1743 "c-parse.y"
! { yyval.ttype = build_array_declarator (NULL_TREE, yyvsp[-1].ttype, 0, 0); }
! break;
!
! case 419:
! #line 1745 "c-parse.y"
! { yyval.ttype = build_array_declarator (NULL_TREE, yyvsp[-2].ttype, 0, 1); }
! break;
!
! case 420:
! #line 1747 "c-parse.y"
! { yyval.ttype = build_array_declarator (yyvsp[-1].ttype, yyvsp[-2].ttype, 1, 0); }
! break;
!
! case 421:
! #line 1750 "c-parse.y"
! { yyval.ttype = build_array_declarator (yyvsp[-1].ttype, yyvsp[-3].ttype, 1, 0); }
! break;
!
! case 424:
! #line 1759 "c-parse.y"
! {
pedwarn ("deprecated use of label at end of compound statement");
! }
! break;
!
! case 432:
! #line 1776 "c-parse.y"
! { if (pedantic && !flag_isoc99)
! pedwarn ("ISO C89 forbids mixed declarations and code"); }
! break;
!
! case 447:
! #line 1806 "c-parse.y"
! { pushlevel (0);
clear_last_expr ();
add_scope_stmt (/*begin_p=*/1, /*partial_p=*/0);
! }
! break;
!
! case 448:
! #line 1813 "c-parse.y"
! { yyval.ttype = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/0); }
! break;
!
! case 449:
! #line 1818 "c-parse.y"
! { if (flag_isoc99)
{
yyval.ttype = c_begin_compound_stmt ();
pushlevel (0);
*************** case 448:
*** 4041,4051 ****
}
else
yyval.ttype = NULL_TREE;
! ;
! break;}
! case 449:
! #line 1987 "c-parse.y"
! { if (flag_isoc99)
{
tree scope_stmt = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/0);
yyval.ttype = poplevel (kept_level_p (), 0, 0);
--- 4522,4533 ----
}
else
yyval.ttype = NULL_TREE;
! }
! break;
!
! case 450:
! #line 1832 "c-parse.y"
! { if (flag_isoc99)
{
tree scope_stmt = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/0);
yyval.ttype = poplevel (kept_level_p (), 0, 0);
*************** case 449:
*** 4054,4100 ****
= yyval.ttype;
}
else
! yyval.ttype = NULL_TREE; ;
! break;}
! case 451:
! #line 2004 "c-parse.y"
! { if (pedantic)
! pedwarn ("ISO C forbids label declarations"); ;
! break;}
! case 454:
! #line 2015 "c-parse.y"
! { tree link;
for (link = yyvsp[-1].ttype; link; link = TREE_CHAIN (link))
{
tree label = shadow_label (TREE_VALUE (link));
C_DECLARED_LABEL_FLAG (label) = 1;
add_decl_stmt (label);
}
! ;
! break;}
! case 455:
! #line 2029 "c-parse.y"
! {;
! break;}
! case 457:
! #line 2033 "c-parse.y"
! { compstmt_count++;
! yyval.ttype = c_begin_compound_stmt (); ;
! break;}
! case 458:
! #line 2038 "c-parse.y"
! { yyval.ttype = convert (void_type_node, integer_zero_node); ;
! break;}
! case 459:
! #line 2040 "c-parse.y"
! { yyval.ttype = poplevel (kept_level_p (), 1, 0);
SCOPE_STMT_BLOCK (TREE_PURPOSE (yyvsp[0].ttype))
= SCOPE_STMT_BLOCK (TREE_VALUE (yyvsp[0].ttype))
! = yyval.ttype; ;
! break;}
! case 462:
! #line 2053 "c-parse.y"
! { if (current_function_decl == 0)
{
error ("braced-group within expression allowed only inside a function");
YYERROR;
--- 4536,4589 ----
= yyval.ttype;
}
else
! yyval.ttype = NULL_TREE; }
! break;
!
! case 452:
! #line 1848 "c-parse.y"
! { if (pedantic)
! pedwarn ("ISO C forbids label declarations"); }
! break;
!
! case 455:
! #line 1859 "c-parse.y"
! { tree link;
for (link = yyvsp[-1].ttype; link; link = TREE_CHAIN (link))
{
tree label = shadow_label (TREE_VALUE (link));
C_DECLARED_LABEL_FLAG (label) = 1;
add_decl_stmt (label);
}
! }
! break;
!
! case 456:
! #line 1872 "c-parse.y"
! {}
! break;
!
! case 458:
! #line 1876 "c-parse.y"
! { compstmt_count++;
! yyval.ttype = c_begin_compound_stmt (); }
! break;
!
! case 459:
! #line 1881 "c-parse.y"
! { yyval.ttype = convert (void_type_node, integer_zero_node); }
! break;
!
! case 460:
! #line 1883 "c-parse.y"
! { yyval.ttype = poplevel (kept_level_p (), 1, 0);
SCOPE_STMT_BLOCK (TREE_PURPOSE (yyvsp[0].ttype))
= SCOPE_STMT_BLOCK (TREE_VALUE (yyvsp[0].ttype))
! = yyval.ttype; }
! break;
!
! case 463:
! #line 1896 "c-parse.y"
! { if (current_function_decl == 0)
{
error ("braced-group within expression allowed only inside a function");
YYERROR;
*************** case 462:
*** 4107,4139 ****
push_label_level ();
compstmt_count++;
yyval.ttype = add_stmt (build_stmt (COMPOUND_STMT, last_tree));
! ;
! break;}
! case 463:
! #line 2070 "c-parse.y"
! { RECHAIN_STMTS (yyvsp[-1].ttype, COMPOUND_BODY (yyvsp[-1].ttype));
last_expr_type = NULL_TREE;
! yyval.ttype = yyvsp[-1].ttype; ;
! break;}
! case 464:
! #line 2078 "c-parse.y"
! { c_finish_then (); ;
! break;}
! case 466:
! #line 2095 "c-parse.y"
! { yyval.ttype = c_begin_if_stmt (); ;
! break;}
! case 467:
! #line 2097 "c-parse.y"
! { c_expand_start_cond (c_common_truthvalue_conversion (yyvsp[-1].ttype),
compstmt_count,yyvsp[-3].ttype);
yyval.itype = stmt_count;
if_stmt_file = yyvsp[-7].filename;
! if_stmt_line = yyvsp[-6].lineno; ;
! break;}
! case 468:
! #line 2109 "c-parse.y"
! { stmt_count++;
compstmt_count++;
yyval.ttype
= add_stmt (build_stmt (DO_STMT, NULL_TREE,
--- 4596,4633 ----
push_label_level ();
compstmt_count++;
yyval.ttype = add_stmt (build_stmt (COMPOUND_STMT, last_tree));
! }
! break;
!
! case 464:
! #line 1913 "c-parse.y"
! { RECHAIN_STMTS (yyvsp[-1].ttype, COMPOUND_BODY (yyvsp[-1].ttype));
last_expr_type = NULL_TREE;
! yyval.ttype = yyvsp[-1].ttype; }
! break;
!
! case 465:
! #line 1921 "c-parse.y"
! { c_finish_then (); }
! break;
!
! case 467:
! #line 1929 "c-parse.y"
! { yyval.ttype = c_begin_if_stmt (); }
! break;
!
! case 468:
! #line 1931 "c-parse.y"
! { c_expand_start_cond (c_common_truthvalue_conversion (yyvsp[-1].ttype),
compstmt_count,yyvsp[-3].ttype);
yyval.itype = stmt_count;
if_stmt_file = yyvsp[-7].filename;
! if_stmt_line = yyvsp[-6].lineno; }
! break;
!
! case 469:
! #line 1941 "c-parse.y"
! { stmt_count++;
compstmt_count++;
yyval.ttype
= add_stmt (build_stmt (DO_STMT, NULL_TREE,
*************** case 468:
*** 4142,4174 ****
parsing the complete do-statement, set the
condition now. Otherwise, we can get crashes at
RTL-generation time. */
! DO_COND (yyval.ttype) = error_mark_node; ;
! break;}
! case 469:
! #line 2120 "c-parse.y"
! { yyval.ttype = yyvsp[-2].ttype;
! RECHAIN_STMTS (yyval.ttype, DO_BODY (yyval.ttype)); ;
! break;}
! case 470:
! #line 2128 "c-parse.y"
! { if (yychar == YYEMPTY)
yychar = YYLEX;
! yyval.filename = input_filename; ;
! break;}
! case 471:
! #line 2134 "c-parse.y"
! { if (yychar == YYEMPTY)
yychar = YYLEX;
! yyval.lineno = lineno; ;
! break;}
! case 474:
! #line 2147 "c-parse.y"
! { if (flag_isoc99)
! RECHAIN_STMTS (yyvsp[-2].ttype, COMPOUND_BODY (yyvsp[-2].ttype)); ;
! break;}
! case 475:
! #line 2153 "c-parse.y"
! { if (yyvsp[0].ttype)
{
STMT_LINENO (yyvsp[0].ttype) = yyvsp[-1].lineno;
/* ??? We currently have no way of recording
--- 4636,4673 ----
parsing the complete do-statement, set the
condition now. Otherwise, we can get crashes at
RTL-generation time. */
! DO_COND (yyval.ttype) = error_mark_node; }
! break;
!
! case 470:
! #line 1952 "c-parse.y"
! { yyval.ttype = yyvsp[-2].ttype;
! RECHAIN_STMTS (yyval.ttype, DO_BODY (yyval.ttype)); }
! break;
!
! case 471:
! #line 1958 "c-parse.y"
! { if (yychar == YYEMPTY)
yychar = YYLEX;
! yyval.filename = input_filename; }
! break;
!
! case 472:
! #line 1964 "c-parse.y"
! { if (yychar == YYEMPTY)
yychar = YYLEX;
! yyval.lineno = lineno; }
! break;
!
! case 475:
! #line 1977 "c-parse.y"
! { if (flag_isoc99)
! RECHAIN_STMTS (yyvsp[-2].ttype, COMPOUND_BODY (yyvsp[-2].ttype)); }
! break;
!
! case 476:
! #line 1983 "c-parse.y"
! { if (yyvsp[0].ttype)
{
STMT_LINENO (yyvsp[0].ttype) = yyvsp[-1].lineno;
/* ??? We currently have no way of recording
*************** case 475:
*** 4177,4343 ****
but I suspect that problems will occur when
doing inlining at the tree level. */
}
! ;
! break;}
! case 476:
! #line 2167 "c-parse.y"
! { if (yyvsp[0].ttype)
{
STMT_LINENO (yyvsp[0].ttype) = yyvsp[-1].lineno;
}
! ;
! break;}
! case 477:
! #line 2176 "c-parse.y"
! { c_expand_start_else ();
! yyvsp[-1].itype = stmt_count; ;
! break;}
! case 478:
! #line 2179 "c-parse.y"
! { c_finish_else ();
c_expand_end_cond ();
if (extra_warnings && stmt_count == yyvsp[-3].itype)
! warning ("empty body in an else-statement"); ;
! break;}
! case 479:
! #line 2184 "c-parse.y"
! { c_expand_end_cond ();
/* This warning is here instead of in simple_if, because we
do not want a warning if an empty if is followed by an
else statement. Increment stmt_count so we don't
give a second error if this is a nested `if'. */
if (extra_warnings && stmt_count++ == yyvsp[0].itype)
warning_with_file_and_line (if_stmt_file, if_stmt_line,
! "empty body in an if-statement"); ;
! break;}
! case 480:
! #line 2196 "c-parse.y"
! { c_expand_end_cond (); ;
! break;}
! case 481:
! #line 2206 "c-parse.y"
! { stmt_count++;
! yyval.ttype = c_begin_while_stmt (); ;
! break;}
! case 482:
! #line 2209 "c-parse.y"
! { yyvsp[-1].ttype = c_common_truthvalue_conversion (yyvsp[-1].ttype);
c_finish_while_stmt_cond
(c_common_truthvalue_conversion (yyvsp[-1].ttype), yyvsp[-3].ttype);
! yyval.ttype = add_stmt (yyvsp[-3].ttype); ;
! break;}
! case 483:
! #line 2214 "c-parse.y"
! { RECHAIN_STMTS (yyvsp[-1].ttype, WHILE_BODY (yyvsp[-1].ttype)); ;
! break;}
! case 484:
! #line 2217 "c-parse.y"
! { DO_COND (yyvsp[-4].ttype) = c_common_truthvalue_conversion (yyvsp[-2].ttype); ;
! break;}
! case 485:
! #line 2219 "c-parse.y"
! { ;
! break;}
! case 486:
! #line 2221 "c-parse.y"
! { yyval.ttype = build_stmt (FOR_STMT, NULL_TREE, NULL_TREE,
NULL_TREE, NULL_TREE);
! add_stmt (yyval.ttype); ;
! break;}
! case 487:
! #line 2225 "c-parse.y"
! { stmt_count++;
! RECHAIN_STMTS (yyvsp[-2].ttype, FOR_INIT_STMT (yyvsp[-2].ttype)); ;
! break;}
! case 488:
! #line 2228 "c-parse.y"
! { if (yyvsp[-1].ttype)
FOR_COND (yyvsp[-5].ttype)
! = c_common_truthvalue_conversion (yyvsp[-1].ttype); ;
! break;}
! case 489:
! #line 2232 "c-parse.y"
! { FOR_EXPR (yyvsp[-8].ttype) = yyvsp[-1].ttype; ;
! break;}
! case 490:
! #line 2234 "c-parse.y"
! { RECHAIN_STMTS (yyvsp[-10].ttype, FOR_BODY (yyvsp[-10].ttype)); ;
! break;}
! case 491:
! #line 2236 "c-parse.y"
! { stmt_count++;
! yyval.ttype = c_start_case (yyvsp[-1].ttype); ;
! break;}
! case 492:
! #line 2239 "c-parse.y"
! { c_finish_case (); ;
! break;}
! case 493:
! #line 2244 "c-parse.y"
! { add_stmt (build_stmt (EXPR_STMT, yyvsp[-1].ttype)); ;
! break;}
! case 494:
! #line 2246 "c-parse.y"
! { check_for_loop_decls (); ;
! break;}
! case 495:
! #line 2252 "c-parse.y"
! { stmt_count++; yyval.ttype = yyvsp[0].ttype; ;
! break;}
! case 496:
! #line 2254 "c-parse.y"
! { stmt_count++;
! yyval.ttype = c_expand_expr_stmt (yyvsp[-1].ttype); ;
! break;}
! case 497:
! #line 2257 "c-parse.y"
! { if (flag_isoc99)
RECHAIN_STMTS (yyvsp[-2].ttype, COMPOUND_BODY (yyvsp[-2].ttype));
! yyval.ttype = NULL_TREE; ;
! break;}
! case 498:
! #line 2261 "c-parse.y"
! { stmt_count++;
! yyval.ttype = add_stmt (build_break_stmt ()); ;
! break;}
! case 499:
! #line 2264 "c-parse.y"
! { stmt_count++;
! yyval.ttype = add_stmt (build_continue_stmt ()); ;
! break;}
! case 500:
! #line 2267 "c-parse.y"
! { stmt_count++;
! yyval.ttype = c_expand_return (NULL_TREE); ;
! break;}
! case 501:
! #line 2270 "c-parse.y"
! { stmt_count++;
! yyval.ttype = c_expand_return (yyvsp[-1].ttype); ;
! break;}
! case 502:
! #line 2273 "c-parse.y"
! { stmt_count++;
! yyval.ttype = simple_asm_stmt (yyvsp[-2].ttype); ;
! break;}
! case 503:
! #line 2277 "c-parse.y"
! { stmt_count++;
! yyval.ttype = build_asm_stmt (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, NULL_TREE); ;
! break;}
! case 504:
! #line 2282 "c-parse.y"
! { stmt_count++;
! yyval.ttype = build_asm_stmt (yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE); ;
! break;}
! case 505:
! #line 2287 "c-parse.y"
! { stmt_count++;
! yyval.ttype = build_asm_stmt (yyvsp[-10].ttype, yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype); ;
! break;}
! case 506:
! #line 2290 "c-parse.y"
! { tree decl;
stmt_count++;
decl = lookup_label (yyvsp[-1].ttype);
if (decl != 0)
--- 4676,4873 ----
but I suspect that problems will occur when
doing inlining at the tree level. */
}
! }
! break;
!
! case 477:
! #line 1997 "c-parse.y"
! { if (yyvsp[0].ttype)
{
STMT_LINENO (yyvsp[0].ttype) = yyvsp[-1].lineno;
}
! }
! break;
!
! case 478:
! #line 2006 "c-parse.y"
! { c_expand_start_else ();
! yyvsp[-1].itype = stmt_count; }
! break;
!
! case 479:
! #line 2009 "c-parse.y"
! { c_finish_else ();
c_expand_end_cond ();
if (extra_warnings && stmt_count == yyvsp[-3].itype)
! warning ("empty body in an else-statement"); }
! break;
!
! case 480:
! #line 2014 "c-parse.y"
! { c_expand_end_cond ();
/* This warning is here instead of in simple_if, because we
do not want a warning if an empty if is followed by an
else statement. Increment stmt_count so we don't
give a second error if this is a nested `if'. */
if (extra_warnings && stmt_count++ == yyvsp[0].itype)
warning_with_file_and_line (if_stmt_file, if_stmt_line,
! "empty body in an if-statement"); }
! break;
!
! case 481:
! #line 2024 "c-parse.y"
! { c_expand_end_cond (); }
! break;
!
! case 482:
! #line 2027 "c-parse.y"
! { stmt_count++;
! yyval.ttype = c_begin_while_stmt (); }
! break;
!
! case 483:
! #line 2030 "c-parse.y"
! { yyvsp[-1].ttype = c_common_truthvalue_conversion (yyvsp[-1].ttype);
c_finish_while_stmt_cond
(c_common_truthvalue_conversion (yyvsp[-1].ttype), yyvsp[-3].ttype);
! yyval.ttype = add_stmt (yyvsp[-3].ttype); }
! break;
!
! case 484:
! #line 2035 "c-parse.y"
! { RECHAIN_STMTS (yyvsp[-1].ttype, WHILE_BODY (yyvsp[-1].ttype)); }
! break;
!
! case 485:
! #line 2038 "c-parse.y"
! { DO_COND (yyvsp[-4].ttype) = c_common_truthvalue_conversion (yyvsp[-2].ttype); }
! break;
!
! case 486:
! #line 2040 "c-parse.y"
! { }
! break;
!
! case 487:
! #line 2042 "c-parse.y"
! { yyval.ttype = build_stmt (FOR_STMT, NULL_TREE, NULL_TREE,
NULL_TREE, NULL_TREE);
! add_stmt (yyval.ttype); }
! break;
!
! case 488:
! #line 2046 "c-parse.y"
! { stmt_count++;
! RECHAIN_STMTS (yyvsp[-2].ttype, FOR_INIT_STMT (yyvsp[-2].ttype)); }
! break;
!
! case 489:
! #line 2049 "c-parse.y"
! { if (yyvsp[-1].ttype)
FOR_COND (yyvsp[-5].ttype)
! = c_common_truthvalue_conversion (yyvsp[-1].ttype); }
! break;
!
! case 490:
! #line 2053 "c-parse.y"
! { FOR_EXPR (yyvsp[-8].ttype) = yyvsp[-1].ttype; }
! break;
!
! case 491:
! #line 2055 "c-parse.y"
! { RECHAIN_STMTS (yyvsp[-10].ttype, FOR_BODY (yyvsp[-10].ttype)); }
! break;
!
! case 492:
! #line 2057 "c-parse.y"
! { stmt_count++;
! yyval.ttype = c_start_case (yyvsp[-1].ttype); }
! break;
!
! case 493:
! #line 2060 "c-parse.y"
! { c_finish_case (); }
! break;
!
! case 494:
! #line 2065 "c-parse.y"
! { add_stmt (build_stmt (EXPR_STMT, yyvsp[-1].ttype)); }
! break;
!
! case 495:
! #line 2067 "c-parse.y"
! { check_for_loop_decls (); }
! break;
!
! case 496:
! #line 2073 "c-parse.y"
! { stmt_count++; yyval.ttype = yyvsp[0].ttype; }
! break;
!
! case 497:
! #line 2075 "c-parse.y"
! { stmt_count++;
! yyval.ttype = c_expand_expr_stmt (yyvsp[-1].ttype); }
! break;
!
! case 498:
! #line 2078 "c-parse.y"
! { if (flag_isoc99)
RECHAIN_STMTS (yyvsp[-2].ttype, COMPOUND_BODY (yyvsp[-2].ttype));
! yyval.ttype = NULL_TREE; }
! break;
!
! case 499:
! #line 2082 "c-parse.y"
! { stmt_count++;
! yyval.ttype = add_stmt (build_break_stmt ()); }
! break;
!
! case 500:
! #line 2085 "c-parse.y"
! { stmt_count++;
! yyval.ttype = add_stmt (build_continue_stmt ()); }
! break;
!
! case 501:
! #line 2088 "c-parse.y"
! { stmt_count++;
! yyval.ttype = c_expand_return (NULL_TREE); }
! break;
!
! case 502:
! #line 2091 "c-parse.y"
! { stmt_count++;
! yyval.ttype = c_expand_return (yyvsp[-1].ttype); }
! break;
!
! case 503:
! #line 2094 "c-parse.y"
! { stmt_count++;
! yyval.ttype = simple_asm_stmt (yyvsp[-2].ttype); }
! break;
!
! case 504:
! #line 2098 "c-parse.y"
! { stmt_count++;
! yyval.ttype = build_asm_stmt (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, NULL_TREE); }
! break;
!
! case 505:
! #line 2103 "c-parse.y"
! { stmt_count++;
! yyval.ttype = build_asm_stmt (yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE); }
! break;
!
! case 506:
! #line 2108 "c-parse.y"
! { stmt_count++;
! yyval.ttype = build_asm_stmt (yyvsp[-10].ttype, yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype); }
! break;
!
! case 507:
! #line 2111 "c-parse.y"
! { tree decl;
stmt_count++;
decl = lookup_label (yyvsp[-1].ttype);
if (decl != 0)
*************** case 506:
*** 4347,4384 ****
}
else
yyval.ttype = NULL_TREE;
! ;
! break;}
! case 507:
! #line 2302 "c-parse.y"
! { if (pedantic)
pedwarn ("ISO C forbids `goto *expr;'");
stmt_count++;
yyvsp[-1].ttype = convert (ptr_type_node, yyvsp[-1].ttype);
! yyval.ttype = add_stmt (build_stmt (GOTO_STMT, yyvsp[-1].ttype)); ;
! break;}
! case 508:
! #line 2308 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
! break;}
! case 509:
! #line 2316 "c-parse.y"
! { stmt_count++;
! yyval.ttype = do_case (yyvsp[-1].ttype, NULL_TREE); ;
! break;}
! case 510:
! #line 2319 "c-parse.y"
! { stmt_count++;
! yyval.ttype = do_case (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
! break;}
! case 511:
! #line 2322 "c-parse.y"
! { stmt_count++;
! yyval.ttype = do_case (NULL_TREE, NULL_TREE); ;
! break;}
! case 512:
! #line 2325 "c-parse.y"
! { tree label = define_label (yyvsp[-3].filename, yyvsp[-2].lineno, yyvsp[-4].ttype);
stmt_count++;
if (label)
{
--- 4877,4920 ----
}
else
yyval.ttype = NULL_TREE;
! }
! break;
!
! case 508:
! #line 2123 "c-parse.y"
! { if (pedantic)
pedwarn ("ISO C forbids `goto *expr;'");
stmt_count++;
yyvsp[-1].ttype = convert (ptr_type_node, yyvsp[-1].ttype);
! yyval.ttype = add_stmt (build_stmt (GOTO_STMT, yyvsp[-1].ttype)); }
! break;
!
! case 509:
! #line 2129 "c-parse.y"
! { yyval.ttype = NULL_TREE; }
! break;
!
! case 510:
! #line 2135 "c-parse.y"
! { stmt_count++;
! yyval.ttype = do_case (yyvsp[-1].ttype, NULL_TREE); }
! break;
!
! case 511:
! #line 2138 "c-parse.y"
! { stmt_count++;
! yyval.ttype = do_case (yyvsp[-3].ttype, yyvsp[-1].ttype); }
! break;
!
! case 512:
! #line 2141 "c-parse.y"
! { stmt_count++;
! yyval.ttype = do_case (NULL_TREE, NULL_TREE); }
! break;
!
! case 513:
! #line 2144 "c-parse.y"
! { tree label = define_label (yyvsp[-3].filename, yyvsp[-2].lineno, yyvsp[-4].ttype);
stmt_count++;
if (label)
{
*************** case 512:
*** 4387,4475 ****
}
else
yyval.ttype = NULL_TREE;
! ;
! break;}
! case 513:
! #line 2341 "c-parse.y"
! { emit_line_note (input_filename, lineno);
! yyval.ttype = NULL_TREE; ;
! break;}
! case 514:
! #line 2344 "c-parse.y"
! { emit_line_note (input_filename, lineno); ;
! break;}
! case 515:
! #line 2349 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
! break;}
! case 517:
! #line 2356 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
! break;}
! case 520:
! #line 2363 "c-parse.y"
! { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
! break;}
! case 521:
! #line 2368 "c-parse.y"
! { yyval.ttype = build_tree_list (build_tree_list (NULL_TREE, yyvsp[-3].ttype), yyvsp[-1].ttype); ;
! break;}
! case 522:
! #line 2370 "c-parse.y"
! { yyvsp[-5].ttype = build_string (IDENTIFIER_LENGTH (yyvsp[-5].ttype),
IDENTIFIER_POINTER (yyvsp[-5].ttype));
! yyval.ttype = build_tree_list (build_tree_list (yyvsp[-5].ttype, yyvsp[-3].ttype), yyvsp[-1].ttype); ;
! break;}
! case 523:
! #line 2377 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
! break;}
! case 524:
! #line 2379 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype); ;
! break;}
! case 525:
! #line 2389 "c-parse.y"
! { pushlevel (0);
clear_parm_order ();
! declare_parm_level (0); ;
! break;}
! case 526:
! #line 2393 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype;
parmlist_tags_warning ();
! poplevel (0, 0, 0); ;
! break;}
! case 528:
! #line 2401 "c-parse.y"
! { tree parm;
if (pedantic)
pedwarn ("ISO C forbids forward parameter declarations");
/* Mark the forward decls as such. */
for (parm = getdecls (); parm; parm = TREE_CHAIN (parm))
TREE_ASM_WRITTEN (parm) = 1;
! clear_parm_order (); ;
! break;}
! case 529:
! #line 2409 "c-parse.y"
! { /* Dummy action so attributes are in known place
! on parser stack. */ ;
! break;}
! case 530:
! #line 2412 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; ;
! break;}
! case 531:
! #line 2414 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE); ;
! break;}
! case 532:
! #line 2420 "c-parse.y"
! { yyval.ttype = get_parm_info (0); ;
! break;}
! case 533:
! #line 2422 "c-parse.y"
! { yyval.ttype = get_parm_info (0);
/* Gcc used to allow this as an extension. However, it does
not work for all targets, and thus has been disabled.
Also, since func (...) and func () are indistinguishable,
--- 4923,5028 ----
}
else
yyval.ttype = NULL_TREE;
! }
! break;
!
! case 514:
! #line 2160 "c-parse.y"
! { emit_line_note (input_filename, lineno);
! yyval.ttype = NULL_TREE; }
! break;
!
! case 515:
! #line 2163 "c-parse.y"
! { emit_line_note (input_filename, lineno); }
! break;
!
! case 516:
! #line 2168 "c-parse.y"
! { yyval.ttype = NULL_TREE; }
! break;
!
! case 518:
! #line 2174 "c-parse.y"
! { yyval.ttype = NULL_TREE; }
! break;
!
! case 521:
! #line 2181 "c-parse.y"
! { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); }
! break;
!
! case 522:
! #line 2186 "c-parse.y"
! { yyval.ttype = build_tree_list (build_tree_list (NULL_TREE, yyvsp[-3].ttype), yyvsp[-1].ttype); }
! break;
!
! case 523:
! #line 2188 "c-parse.y"
! { yyvsp[-5].ttype = build_string (IDENTIFIER_LENGTH (yyvsp[-5].ttype),
IDENTIFIER_POINTER (yyvsp[-5].ttype));
! yyval.ttype = build_tree_list (build_tree_list (yyvsp[-5].ttype, yyvsp[-3].ttype), yyvsp[-1].ttype); }
! break;
!
! case 524:
! #line 2195 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); }
! break;
!
! case 525:
! #line 2197 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype); }
! break;
!
! case 526:
! #line 2203 "c-parse.y"
! { pushlevel (0);
clear_parm_order ();
! declare_parm_level (0); }
! break;
!
! case 527:
! #line 2207 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype;
parmlist_tags_warning ();
! poplevel (0, 0, 0); }
! break;
!
! case 529:
! #line 2215 "c-parse.y"
! { tree parm;
if (pedantic)
pedwarn ("ISO C forbids forward parameter declarations");
/* Mark the forward decls as such. */
for (parm = getdecls (); parm; parm = TREE_CHAIN (parm))
TREE_ASM_WRITTEN (parm) = 1;
! clear_parm_order (); }
! break;
!
! case 530:
! #line 2223 "c-parse.y"
! { /* Dummy action so attributes are in known place
! on parser stack. */ }
! break;
!
! case 531:
! #line 2226 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; }
! break;
!
! case 532:
! #line 2228 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE); }
! break;
!
! case 533:
! #line 2233 "c-parse.y"
! { yyval.ttype = get_parm_info (0); }
! break;
!
! case 534:
! #line 2235 "c-parse.y"
! { yyval.ttype = get_parm_info (0);
/* Gcc used to allow this as an extension. However, it does
not work for all targets, and thus has been disabled.
Also, since func (...) and func () are indistinguishable,
*************** case 533:
*** 4477,4584 ****
tries to verify that BUILT_IN_NEXT_ARG is being used
correctly. */
error ("ISO C requires a named argument before `...'");
! ;
! break;}
! case 534:
! #line 2432 "c-parse.y"
! { yyval.ttype = get_parm_info (1);
parsing_iso_function_signature = true;
! ;
! break;}
! case 535:
! #line 2436 "c-parse.y"
! { yyval.ttype = get_parm_info (0); ;
! break;}
! case 536:
! #line 2441 "c-parse.y"
! { push_parm_decl (yyvsp[0].ttype); ;
! break;}
! case 537:
! #line 2443 "c-parse.y"
! { push_parm_decl (yyvsp[0].ttype); ;
! break;}
! case 538:
! #line 2450 "c-parse.y"
! { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
yyvsp[-1].ttype),
chainon (yyvsp[0].ttype, all_prefix_attributes));
! POP_DECLSPEC_STACK; ;
! break;}
! case 539:
! #line 2455 "c-parse.y"
! { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
yyvsp[-1].ttype),
chainon (yyvsp[0].ttype, all_prefix_attributes));
! POP_DECLSPEC_STACK; ;
! break;}
! case 540:
! #line 2460 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype;
! POP_DECLSPEC_STACK; ;
! break;}
! case 541:
! #line 2463 "c-parse.y"
! { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
yyvsp[-1].ttype),
chainon (yyvsp[0].ttype, all_prefix_attributes));
! POP_DECLSPEC_STACK; ;
! break;}
! case 542:
! #line 2469 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype;
! POP_DECLSPEC_STACK; ;
! break;}
! case 543:
! #line 2477 "c-parse.y"
! { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
yyvsp[-1].ttype),
chainon (yyvsp[0].ttype, all_prefix_attributes));
! POP_DECLSPEC_STACK; ;
! break;}
! case 544:
! #line 2482 "c-parse.y"
! { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
yyvsp[-1].ttype),
chainon (yyvsp[0].ttype, all_prefix_attributes));
! POP_DECLSPEC_STACK; ;
! break;}
! case 545:
! #line 2487 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype;
! POP_DECLSPEC_STACK; ;
! break;}
! case 546:
! #line 2490 "c-parse.y"
! { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
yyvsp[-1].ttype),
chainon (yyvsp[0].ttype, all_prefix_attributes));
! POP_DECLSPEC_STACK; ;
! break;}
! case 547:
! #line 2496 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype;
! POP_DECLSPEC_STACK; ;
! break;}
! case 548:
! #line 2502 "c-parse.y"
! { prefix_attributes = chainon (prefix_attributes, yyvsp[-3].ttype);
! all_prefix_attributes = prefix_attributes; ;
! break;}
! case 549:
! #line 2511 "c-parse.y"
! { pushlevel (0);
clear_parm_order ();
! declare_parm_level (1); ;
! break;}
! case 550:
! #line 2515 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype;
parmlist_tags_warning ();
! poplevel (0, 0, 0); ;
! break;}
! case 552:
! #line 2523 "c-parse.y"
! { tree t;
for (t = yyvsp[-1].ttype; t; t = TREE_CHAIN (t))
if (TREE_VALUE (t) == NULL_TREE)
error ("`...' in old-style identifier list");
--- 5030,5155 ----
tries to verify that BUILT_IN_NEXT_ARG is being used
correctly. */
error ("ISO C requires a named argument before `...'");
! }
! break;
!
! case 535:
! #line 2245 "c-parse.y"
! { yyval.ttype = get_parm_info (1);
parsing_iso_function_signature = true;
! }
! break;
!
! case 536:
! #line 2249 "c-parse.y"
! { yyval.ttype = get_parm_info (0); }
! break;
!
! case 537:
! #line 2254 "c-parse.y"
! { push_parm_decl (yyvsp[0].ttype); }
! break;
!
! case 538:
! #line 2256 "c-parse.y"
! { push_parm_decl (yyvsp[0].ttype); }
! break;
!
! case 539:
! #line 2262 "c-parse.y"
! { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
yyvsp[-1].ttype),
chainon (yyvsp[0].ttype, all_prefix_attributes));
! POP_DECLSPEC_STACK; }
! break;
!
! case 540:
! #line 2267 "c-parse.y"
! { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
yyvsp[-1].ttype),
chainon (yyvsp[0].ttype, all_prefix_attributes));
! POP_DECLSPEC_STACK; }
! break;
!
! case 541:
! #line 2272 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype;
! POP_DECLSPEC_STACK; }
! break;
!
! case 542:
! #line 2275 "c-parse.y"
! { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
yyvsp[-1].ttype),
chainon (yyvsp[0].ttype, all_prefix_attributes));
! POP_DECLSPEC_STACK; }
! break;
!
! case 543:
! #line 2281 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype;
! POP_DECLSPEC_STACK; }
! break;
!
! case 544:
! #line 2288 "c-parse.y"
! { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
yyvsp[-1].ttype),
chainon (yyvsp[0].ttype, all_prefix_attributes));
! POP_DECLSPEC_STACK; }
! break;
!
! case 545:
! #line 2293 "c-parse.y"
! { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
yyvsp[-1].ttype),
chainon (yyvsp[0].ttype, all_prefix_attributes));
! POP_DECLSPEC_STACK; }
! break;
!
! case 546:
! #line 2298 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype;
! POP_DECLSPEC_STACK; }
! break;
!
! case 547:
! #line 2301 "c-parse.y"
! { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
yyvsp[-1].ttype),
chainon (yyvsp[0].ttype, all_prefix_attributes));
! POP_DECLSPEC_STACK; }
! break;
!
! case 548:
! #line 2307 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype;
! POP_DECLSPEC_STACK; }
! break;
!
! case 549:
! #line 2313 "c-parse.y"
! { prefix_attributes = chainon (prefix_attributes, yyvsp[-3].ttype);
! all_prefix_attributes = prefix_attributes; }
! break;
!
! case 550:
! #line 2320 "c-parse.y"
! { pushlevel (0);
clear_parm_order ();
! declare_parm_level (1); }
! break;
!
! case 551:
! #line 2324 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype;
parmlist_tags_warning ();
! poplevel (0, 0, 0); }
! break;
!
! case 553:
! #line 2332 "c-parse.y"
! { tree t;
for (t = yyvsp[-1].ttype; t; t = TREE_CHAIN (t))
if (TREE_VALUE (t) == NULL_TREE)
error ("`...' in old-style identifier list");
*************** case 552:
*** 4590,4631 ****
|| TREE_PURPOSE (yyval.ttype) == 0
|| TREE_CODE (TREE_PURPOSE (yyval.ttype)) != PARM_DECL))
YYERROR1;
! ;
! break;}
! case 553:
! #line 2541 "c-parse.y"
! { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
! break;}
! case 554:
! #line 2543 "c-parse.y"
! { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
! break;}
! case 555:
! #line 2549 "c-parse.y"
! { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
! break;}
! case 556:
! #line 2551 "c-parse.y"
! { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
! break;}
! case 557:
! #line 2556 "c-parse.y"
! { yyval.ttype = SAVE_EXT_FLAGS();
pedantic = 0;
warn_pointer_arith = 0;
warn_traditional = 0;
! flag_iso = 0; ;
! break;}
! }
- #line 731 "/usr/share/bison/bison.simple"
yyvsp -= yylen;
yyssp -= yylen;
! #if YYLSP_NEEDED
! yylsp -= yylen;
! #endif
#if YYDEBUG
if (yydebug)
--- 5161,5207 ----
|| TREE_PURPOSE (yyval.ttype) == 0
|| TREE_CODE (TREE_PURPOSE (yyval.ttype)) != PARM_DECL))
YYERROR1;
! }
! break;
!
! case 554:
! #line 2350 "c-parse.y"
! { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); }
! break;
!
! case 555:
! #line 2352 "c-parse.y"
! { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); }
! break;
!
! case 556:
! #line 2358 "c-parse.y"
! { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); }
! break;
!
! case 557:
! #line 2360 "c-parse.y"
! { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); }
! break;
!
! case 558:
! #line 2365 "c-parse.y"
! { yyval.ttype = SAVE_EXT_FLAGS();
pedantic = 0;
warn_pointer_arith = 0;
warn_traditional = 0;
! flag_iso = 0; }
! break;
+ }
+
+ /* Line 1016 of /usr/share/bison/yacc.c. */
+ #line 5201 "c-p10012.c"
yyvsp -= yylen;
yyssp -= yylen;
!
#if YYDEBUG
if (yydebug)
*************** case 557:
*** 4639,4647 ****
#endif
*++yyvsp = yyval;
! #if YYLSP_NEEDED
! *++yylsp = yyloc;
! #endif
/* Now `shift' the result of the reduction. Determine what state
that goes to, based on the state we popped back to and the rule
--- 5215,5221 ----
#endif
*++yyvsp = yyval;
!
/* Now `shift' the result of the reduction. Determine what state
that goes to, based on the state we popped back to and the rule
*************** case 557:
*** 4649,4659 ****
yyn = yyr1[yyn];
! yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
! if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
yystate = yytable[yystate];
else
! yystate = yydefgoto[yyn - YYNTBASE];
goto yynewstate;
--- 5223,5233 ----
yyn = yyr1[yyn];
! yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
! if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
yystate = yytable[yystate];
else
! yystate = yydefgoto[yyn - YYNTOKENS];
goto yynewstate;
*************** yyerrlab:
*** 4666,4678 ****
if (!yyerrstatus)
{
++yynerrs;
!
! #ifdef YYERROR_VERBOSE
yyn = yypact[yystate];
! if (yyn > YYFLAG && yyn < YYLAST)
{
YYSIZE_T yysize = 0;
char *yymsg;
int yyx, yycount;
--- 5240,5252 ----
if (!yyerrstatus)
{
++yynerrs;
! #if YYERROR_VERBOSE
yyn = yypact[yystate];
! if (YYPACT_NINF < yyn && yyn < YYLAST)
{
YYSIZE_T yysize = 0;
+ int yytype = YYTRANSLATE (yychar);
char *yymsg;
int yyx, yycount;
*************** yyerrlab:
*** 4681,4695 ****
YYCHECK. */
for (yyx = yyn < 0 ? -yyn : 0;
yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
! if (yycheck[yyx + yyn] == yyx)
yysize += yystrlen (yytname[yyx]) + 15, yycount++;
yysize += yystrlen ("parse error, unexpected ") + 1;
! yysize += yystrlen (yytname[YYTRANSLATE (yychar)]);
yymsg = (char *) YYSTACK_ALLOC (yysize);
if (yymsg != 0)
{
char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
! yyp = yystpcpy (yyp, yytname[YYTRANSLATE (yychar)]);
if (yycount < 5)
{
--- 5255,5269 ----
YYCHECK. */
for (yyx = yyn < 0 ? -yyn : 0;
yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
! if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
yysize += yystrlen (yytname[yyx]) + 15, yycount++;
yysize += yystrlen ("parse error, unexpected ") + 1;
! yysize += yystrlen (yytname[yytype]);
yymsg = (char *) YYSTACK_ALLOC (yysize);
if (yymsg != 0)
{
char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
! yyp = yystpcpy (yyp, yytname[yytype]);
if (yycount < 5)
{
*************** yyerrlab:
*** 4697,4703 ****
for (yyx = yyn < 0 ? -yyn : 0;
yyx < (int) (sizeof (yytname) / sizeof (char *));
yyx++)
! if (yycheck[yyx + yyn] == yyx)
{
const char *yyq = ! yycount ? ", expecting " : " or ";
yyp = yystpcpy (yyp, yyq);
--- 5271,5277 ----
for (yyx = yyn < 0 ? -yyn : 0;
yyx < (int) (sizeof (yytname) / sizeof (char *));
yyx++)
! if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
{
const char *yyq = ! yycount ? ", expecting " : " or ";
yyp = yystpcpy (yyp, yyq);
*************** yyerrlab:
*** 4712,4810 ****
yyerror ("parse error; also virtual memory exhausted");
}
else
! #endif /* defined (YYERROR_VERBOSE) */
yyerror ("parse error");
}
goto yyerrlab1;
! /*--------------------------------------------------.
! | yyerrlab1 -- error raised explicitly by an action |
! `--------------------------------------------------*/
yyerrlab1:
if (yyerrstatus == 3)
{
/* If just tried and failed to reuse lookahead token after an
error, discard it. */
! /* return failure if at end of input */
if (yychar == YYEOF)
! YYABORT;
YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
yychar, yytname[yychar1]));
yychar = YYEMPTY;
}
/* Else will try to reuse lookahead token after shifting the error
token. */
! yyerrstatus = 3; /* Each real token shifted decrements this */
!
! goto yyerrhandle;
! /*-------------------------------------------------------------------.
! | yyerrdefault -- current state does not do anything special for the |
! | error token. |
! `-------------------------------------------------------------------*/
! yyerrdefault:
! #if 0
! /* This is wrong; only states that explicitly want error tokens
! should shift them. */
! /* If its default is to accept any token, ok. Otherwise pop it. */
! yyn = yydefact[yystate];
! if (yyn)
! goto yydefault;
! #endif
- /*---------------------------------------------------------------.
- | yyerrpop -- pop the current state because it cannot handle the |
- | error token |
- `---------------------------------------------------------------*/
- yyerrpop:
- if (yyssp == yyss)
- YYABORT;
- yyvsp--;
- yystate = *--yyssp;
- #if YYLSP_NEEDED
- yylsp--;
- #endif
#if YYDEBUG
! if (yydebug)
! {
! short *yyssp1 = yyss - 1;
! YYFPRINTF (stderr, "Error: state stack now");
! while (yyssp1 != yyssp)
! YYFPRINTF (stderr, " %d", *++yyssp1);
! YYFPRINTF (stderr, "\n");
! }
#endif
-
- /*--------------.
- | yyerrhandle. |
- `--------------*/
- yyerrhandle:
- yyn = yypact[yystate];
- if (yyn == YYFLAG)
- goto yyerrdefault;
-
- yyn += YYTERROR;
- if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
- goto yyerrdefault;
-
- yyn = yytable[yyn];
- if (yyn < 0)
- {
- if (yyn == YYFLAG)
- goto yyerrpop;
- yyn = -yyn;
- goto yyreduce;
}
- else if (yyn == 0)
- goto yyerrpop;
if (yyn == YYFINAL)
YYACCEPT;
--- 5286,5375 ----
yyerror ("parse error; also virtual memory exhausted");
}
else
! #endif /* YYERROR_VERBOSE */
yyerror ("parse error");
}
goto yyerrlab1;
! /*----------------------------------------------------.
! | yyerrlab1 -- error raised explicitly by an action. |
! `----------------------------------------------------*/
yyerrlab1:
if (yyerrstatus == 3)
{
/* If just tried and failed to reuse lookahead token after an
error, discard it. */
! /* Return failure if at end of input. */
if (yychar == YYEOF)
! {
! /* Pop the error token. */
! YYPOPSTACK;
! /* Pop the rest of the stack. */
! while (yyssp > yyss)
! {
! YYDPRINTF ((stderr, "Error: popping "));
! YYDSYMPRINT ((stderr,
! yystos[*yyssp],
! *yyvsp));
! YYDPRINTF ((stderr, "\n"));
! yydestruct (yystos[*yyssp], *yyvsp);
! YYPOPSTACK;
! }
! YYABORT;
! }
!
YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
yychar, yytname[yychar1]));
+ yydestruct (yychar1, yylval);
yychar = YYEMPTY;
}
/* Else will try to reuse lookahead token after shifting the error
token. */
! yyerrstatus = 3; /* Each real token shifted decrements this. */
+ for (;;)
+ {
+ yyn = yypact[yystate];
+ if (yyn != YYPACT_NINF)
+ {
+ yyn += YYTERROR;
+ if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+ {
+ yyn = yytable[yyn];
+ if (0 < yyn)
+ break;
+ }
+ }
! /* Pop the current state because it cannot handle the error token. */
! if (yyssp == yyss)
! YYABORT;
! YYDPRINTF ((stderr, "Error: popping "));
! YYDSYMPRINT ((stderr,
! yystos[*yyssp], *yyvsp));
! YYDPRINTF ((stderr, "\n"));
+ yydestruct (yystos[yystate], *yyvsp);
+ yyvsp--;
+ yystate = *--yyssp;
#if YYDEBUG
! if (yydebug)
! {
! short *yyssp1 = yyss - 1;
! YYFPRINTF (stderr, "Error: state stack now");
! while (yyssp1 != yyssp)
! YYFPRINTF (stderr, " %d", *++yyssp1);
! YYFPRINTF (stderr, "\n");
! }
#endif
}
if (yyn == YYFINAL)
YYACCEPT;
*************** yyerrhandle:
*** 4812,4820 ****
YYDPRINTF ((stderr, "Shifting error token, "));
*++yyvsp = yylval;
! #if YYLSP_NEEDED
! *++yylsp = yylloc;
! #endif
yystate = yyn;
goto yynewstate;
--- 5377,5383 ----
YYDPRINTF ((stderr, "Shifting error token, "));
*++yyvsp = yylval;
!
yystate = yyn;
goto yynewstate;
*************** yyabortlab:
*** 4834,4846 ****
yyresult = 1;
goto yyreturn;
! /*---------------------------------------------.
! | yyoverflowab -- parser overflow comes here. |
! `---------------------------------------------*/
yyoverflowlab:
yyerror ("parser stack overflow");
yyresult = 2;
/* Fall through. */
yyreturn:
#ifndef yyoverflow
--- 5397,5411 ----
yyresult = 1;
goto yyreturn;
! #ifndef yyoverflow
! /*----------------------------------------------.
! | yyoverflowlab -- parser overflow comes here. |
! `----------------------------------------------*/
yyoverflowlab:
yyerror ("parser stack overflow");
yyresult = 2;
/* Fall through. */
+ #endif
yyreturn:
#ifndef yyoverflow
*************** yyreturn:
*** 4849,4855 ****
#endif
return yyresult;
}
! #line 2563 "c-parse.y"
/* yylex() is a thin wrapper around c_lex(), all it does is translate
--- 5414,5422 ----
#endif
return yyresult;
}
!
!
! #line 2372 "c-parse.y"
/* yylex() is a thin wrapper around c_lex(), all it does is translate
*************** free_parser_stacks ()
*** 5420,5422 ****
--- 5987,5991 ----
}
#include "gt-c-parse.h"
+
+
diff -Nrc3pad gcc-3.3.4/gcc/cselib.c gcc-3.3.5/gcc/cselib.c
*** gcc-3.3.4/gcc/cselib.c 2003-05-28 19:22:29.000000000 +0000
--- gcc-3.3.5/gcc/cselib.c 2004-09-13 08:54:35.000000000 +0000
*************** static void cselib_invalidate_regno PARA
*** 63,69 ****
static int cselib_mem_conflict_p PARAMS ((rtx, rtx));
static int cselib_invalidate_mem_1 PARAMS ((void **, void *));
static void cselib_invalidate_mem PARAMS ((rtx));
! static void cselib_invalidate_rtx PARAMS ((rtx, rtx, void *));
static void cselib_record_set PARAMS ((rtx, cselib_val *,
cselib_val *));
static void cselib_record_sets PARAMS ((rtx));
--- 63,69 ----
static int cselib_mem_conflict_p PARAMS ((rtx, rtx));
static int cselib_invalidate_mem_1 PARAMS ((void **, void *));
static void cselib_invalidate_mem PARAMS ((rtx));
! static void cselib_invalidate_rtx_note_stores PARAMS ((rtx, rtx, void *));
static void cselib_record_set PARAMS ((rtx, cselib_val *,
cselib_val *));
static void cselib_record_sets PARAMS ((rtx));
*************** cselib_invalidate_mem (mem_rtx)
*** 1143,1157 ****
htab_traverse (hash_table, cselib_invalidate_mem_1, mem_rtx);
}
! /* Invalidate DEST, which is being assigned to or clobbered. The second and
! the third parameter exist so that this function can be passed to
! note_stores; they are ignored. */
! static void
! cselib_invalidate_rtx (dest, ignore, data)
rtx dest;
- rtx ignore ATTRIBUTE_UNUSED;
- void *data ATTRIBUTE_UNUSED;
{
while (GET_CODE (dest) == STRICT_LOW_PART || GET_CODE (dest) == SIGN_EXTRACT
|| GET_CODE (dest) == ZERO_EXTRACT || GET_CODE (dest) == SUBREG)
--- 1143,1153 ----
htab_traverse (hash_table, cselib_invalidate_mem_1, mem_rtx);
}
! /* Invalidate DEST, which is being assigned to or clobbered. */
! void
! cselib_invalidate_rtx (dest)
rtx dest;
{
while (GET_CODE (dest) == STRICT_LOW_PART || GET_CODE (dest) == SIGN_EXTRACT
|| GET_CODE (dest) == ZERO_EXTRACT || GET_CODE (dest) == SUBREG)
*************** cselib_invalidate_rtx (dest, ignore, dat
*** 1167,1173 ****
invalidate the stack pointer correctly. Note that invalidating
the stack pointer is different from invalidating DEST. */
if (push_operand (dest, GET_MODE (dest)))
! cselib_invalidate_rtx (stack_pointer_rtx, NULL_RTX, NULL);
}
/* Record the result of a SET instruction. DEST is being set; the source
--- 1163,1180 ----
invalidate the stack pointer correctly. Note that invalidating
the stack pointer is different from invalidating DEST. */
if (push_operand (dest, GET_MODE (dest)))
! cselib_invalidate_rtx (stack_pointer_rtx);
! }
!
! /* A wrapper for cselib_invalidate_rtx to be called via note_stores. */
!
! static void
! cselib_invalidate_rtx_note_stores (dest, ignore, data)
! rtx dest;
! rtx ignore ATTRIBUTE_UNUSED;
! void *data ATTRIBUTE_UNUSED;
! {
! cselib_invalidate_rtx (dest);
}
/* Record the result of a SET instruction. DEST is being set; the source
*************** cselib_record_sets (insn)
*** 1293,1299 ****
/* Invalidate all locations written by this insn. Note that the elts we
looked up in the previous loop aren't affected, just some of their
locations may go away. */
! note_stores (body, cselib_invalidate_rtx, NULL);
/* Now enter the equivalences in our tables. */
for (i = 0; i < n_sets; i++)
--- 1300,1306 ----
/* Invalidate all locations written by this insn. Note that the elts we
looked up in the previous loop aren't affected, just some of their
locations may go away. */
! note_stores (body, cselib_invalidate_rtx_note_stores, NULL);
/* Now enter the equivalences in our tables. */
for (i = 0; i < n_sets; i++)
*************** cselib_process_insn (insn)
*** 1358,1364 ****
unlikely to help. */
for (x = REG_NOTES (insn); x; x = XEXP (x, 1))
if (REG_NOTE_KIND (x) == REG_INC)
! cselib_invalidate_rtx (XEXP (x, 0), NULL_RTX, NULL);
#endif
/* Look for any CLOBBERs in CALL_INSN_FUNCTION_USAGE, but only
--- 1365,1371 ----
unlikely to help. */
for (x = REG_NOTES (insn); x; x = XEXP (x, 1))
if (REG_NOTE_KIND (x) == REG_INC)
! cselib_invalidate_rtx (XEXP (x, 0));
#endif
/* Look for any CLOBBERs in CALL_INSN_FUNCTION_USAGE, but only
*************** cselib_process_insn (insn)
*** 1366,1372 ****
if (GET_CODE (insn) == CALL_INSN)
for (x = CALL_INSN_FUNCTION_USAGE (insn); x; x = XEXP (x, 1))
if (GET_CODE (XEXP (x, 0)) == CLOBBER)
! cselib_invalidate_rtx (XEXP (XEXP (x, 0), 0), NULL_RTX, NULL);
cselib_current_insn = 0;
--- 1373,1379 ----
if (GET_CODE (insn) == CALL_INSN)
for (x = CALL_INSN_FUNCTION_USAGE (insn); x; x = XEXP (x, 1))
if (GET_CODE (XEXP (x, 0)) == CLOBBER)
! cselib_invalidate_rtx (XEXP (XEXP (x, 0), 0));
cselib_current_insn = 0;
diff -Nrc3pad gcc-3.3.4/gcc/cselib.h gcc-3.3.5/gcc/cselib.h
*** gcc-3.3.4/gcc/cselib.h 2003-01-08 19:28:57.000000000 +0000
--- gcc-3.3.5/gcc/cselib.h 2004-09-13 08:54:35.000000000 +0000
*************** extern void cselib_process_insn PARAMS
*** 68,70 ****
--- 68,71 ----
extern int rtx_equal_for_cselib_p PARAMS ((rtx, rtx));
extern int references_value_p PARAMS ((rtx, int));
extern rtx cselib_subst_to_values PARAMS ((rtx));
+ extern void cselib_invalidate_rtx PARAMS ((rtx));
diff -Nrc3pad gcc-3.3.4/gcc/doc/contrib.texi gcc-3.3.5/gcc/doc/contrib.texi
*** gcc-3.3.4/gcc/doc/contrib.texi 2003-11-03 22:09:32.000000000 +0000
--- gcc-3.3.5/gcc/doc/contrib.texi 2004-07-04 11:34:30.000000000 +0000
*************** Eric Christopher for his Java porting he
*** 143,149 ****
Branko Cibej for more warning contributions.
@item
! The @uref{http://www.classpath.org,,GNU Classpath project}
for all of their merged runtime code.
@item
--- 143,149 ----
Branko Cibej for more warning contributions.
@item
! The @uref{http://www.gnu.org/software/classpath/,,GNU Classpath project}
for all of their merged runtime code.
@item
diff -Nrc3pad gcc-3.3.4/gcc/doc/cpp.1 gcc-3.3.5/gcc/doc/cpp.1
*** gcc-3.3.4/gcc/doc/cpp.1 2004-05-31 22:43:11.000000000 +0000
--- gcc-3.3.5/gcc/doc/cpp.1 2004-09-30 17:38:13.000000000 +0000
***************
*** 1,8 ****
! .\" Automatically generated by Pod::Man version 1.15
! .\" Mon May 31 22:43:10 2004
.\"
.\" Standard preamble:
! .\" ======================================================================
.de Sh \" Subsection heading
.br
.if t .Sp
--- 1,7 ----
! .\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.13
.\"
.\" Standard preamble:
! .\" ========================================================================
.de Sh \" Subsection heading
.br
.if t .Sp
***************
*** 15,26 ****
.if t .sp .5v
.if n .sp
..
- .de Ip \" List item
- .br
- .ie \\n(.$>=3 .ne \\$3
- .el .ne 3
- .IP "\\$1" \\$2
- ..
.de Vb \" Begin verbatim text
.ft CW
.nf
--- 14,19 ----
***************
*** 28,42 ****
..
.de Ve \" End verbatim text
.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. | will give a
! .\" real vertical bar. \*(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-|\(bv\*(Tr
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
--- 21,34 ----
..
.de Ve \" End verbatim text
.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. | will give a
! .\" real vertical bar. \*(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-|\(bv\*(Tr
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
***************
*** 56,65 ****
. ds R" ''
'br\}
.\"
! .\" If the F register is turned on, we'll generate index entries on stderr
! .\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and
! .\" index entries marked with X<> in POD. Of course, you'll have to process
! .\" the output yourself in some meaningful fashion.
.if \nF \{\
. de IX
. tm Index:\\$1\t\\n%\t"\\$2"
--- 48,57 ----
. ds R" ''
'br\}
.\"
! .\" If the F register is turned on, we'll generate index entries on stderr for
! .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
! .\" entries marked with X<> in POD. Of course, you'll have to process the
! .\" output yourself in some meaningful fashion.
.if \nF \{\
. de IX
. tm Index:\\$1\t\\n%\t"\\$2"
***************
*** 68,81 ****
. rr F
.\}
.\"
! .\" For nroff, turn off justification. Always turn off hyphenation; it
! .\" makes way too many mistakes in technical documents.
.hy 0
.if n .na
.\"
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
.\" Fear. Run. Save yourself. No user-serviceable parts.
- .bd B 3
. \" fudge factors for nroff and troff
.if n \{\
. ds #H 0
--- 60,72 ----
. rr F
.\}
.\"
! .\" For nroff, turn off justification. Always turn off hyphenation; it makes
! .\" way too many mistakes in technical documents.
.hy 0
.if n .na
.\"
.\" 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
***************
*** 135,145 ****
. ds Ae AE
.\}
.rm #[ #] #H #V #F C
! .\" ======================================================================
.\"
.IX Title "CPP 1"
! .TH CPP 1 "gcc-3.3.4" "2004-05-31" "GNU"
! .UC
.SH "NAME"
cpp \- The C Preprocessor
.SH "SYNOPSIS"
--- 126,135 ----
. ds Ae AE
.\}
.rm #[ #] #H #V #F C
! .\" ========================================================================
.\"
.IX Title "CPP 1"
! .TH CPP 1 "2004-09-30" "gcc-3.3.5" "GNU"
.SH "NAME"
cpp \- The C Preprocessor
.SH "SYNOPSIS"
*************** text processor. It will choke on input
*** 166,177 ****
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 preprocessed, all the hard tabs
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
! (Pascal, 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.
--- 156,167 ----
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 preprocessed, all the hard tabs
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
! (Pascal, 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.
*************** This manual describes the behavior of th
*** 196,203 ****
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 \f(CW@ref\fR{Traditional
! Mode}.
.PP
For clarity, unless noted otherwise, references to \fB\s-1CPP\s0\fR in this
manual refer to \s-1GNU\s0 \s-1CPP\s0.
--- 186,193 ----
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\s0 \s-1CPP\s0.
*************** The C preprocessor expects two file name
*** 208,217 ****
other files it specifies with \fB#include\fR. All the output generated
by the combined input files is written in \fIoutfile\fR.
.PP
! Either \fIinfile\fR or \fIoutfile\fR may be \fB-\fR, which as
\&\fIinfile\fR means to read from standard input and as \fIoutfile\fR
means to write to standard output. Also, if either file is omitted, it
! means the same as if \fB-\fR had been specified for that file.
.PP
Unless otherwise noted, or the option ends in \fB=\fR, all options
which take an argument may have that argument appear either immediately
--- 198,207 ----
other files it specifies with \fB#include\fR. All the output generated
by the combined input files is written in \fIoutfile\fR.
.PP
! Either \fIinfile\fR or \fIoutfile\fR may be \fB\-\fR, which as
\&\fIinfile\fR means to read from standard input and as \fIoutfile\fR
means to write to standard output. Also, if either file is omitted, it
! means the same as if \fB\-\fR had been specified for that file.
.PP
Unless otherwise noted, or the option ends in \fB=\fR, all options
which take an argument may have that argument appear either immediately
*************** after the option, or with a space betwee
*** 221,230 ****
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
.IX Item "-D name"
! Predefine \fIname\fR as a macro, with definition \f(CW\*(C`1\*(C'\fR.
! .Ip "\fB\-D\fR \fIname\fR\fB=\fR\fIdefinition\fR" 4
.IX Item "-D name=definition"
Predefine \fIname\fR as a macro, with definition \fIdefinition\fR.
There are no restrictions on the contents of \fIdefinition\fR, but if
--- 211,220 ----
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
.IX Item "-D name"
! Predefine \fIname\fR as a macro, with definition \f(CW1\fR.
! .IP "\fB\-D\fR \fIname\fR\fB=\fR\fIdefinition\fR" 4
.IX Item "-D name=definition"
Predefine \fIname\fR as a macro, with definition \fIdefinition\fR.
There are no restrictions on the contents of \fIdefinition\fR, but if
*************** to quote the option. With \fBsh\fR and
*** 242,256 ****
are given on the command line. All \fB\-imacros\fR \fIfile\fR and
\&\fB\-include\fR \fIfile\fR options are processed after all
\&\fB\-D\fR and \fB\-U\fR options.
! .Ip "\fB\-U\fR \fIname\fR" 4
.IX Item "-U name"
Cancel any previous definition of \fIname\fR, either built in or
provided with a \fB\-D\fR option.
! .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\-I\fR \fIdir\fR" 4
.IX Item "-I dir"
Add the directory \fIdir\fR to the list of directories to be searched
for header files.
--- 232,246 ----
are given on the command line. All \fB\-imacros\fR \fIfile\fR and
\&\fB\-include\fR \fIfile\fR options are processed after all
\&\fB\-D\fR and \fB\-U\fR options.
! .IP "\fB\-U\fR \fIname\fR" 4
.IX Item "-U name"
Cancel any previous definition of \fIname\fR, either built in or
provided with a \fB\-D\fR option.
! .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\-I\fR \fIdir\fR" 4
.IX Item "-I dir"
Add the directory \fIdir\fR to the list of directories to be searched
for header files.
*************** system include directory, the option is
*** 261,307 ****
default search order for system directories and the special treatment
of system headers are not defeated
\&.
! .Ip "\fB\-o\fR \fIfile\fR" 4
.IX Item "-o file"
Write output to \fIfile\fR. This is the same as specifying \fIfile\fR
as the second non-option argument to \fBcpp\fR. \fBgcc\fR has a
different interpretation of a second non-option argument, so you must
use \fB\-o\fR to specify the output file.
! .Ip "\fB\-Wall\fR" 4
.IX Item "-Wall"
Turns on all optional warnings which are desirable for normal code. At
present this is \fB\-Wcomment\fR and \fB\-Wtrigraphs\fR. Note that
many of the preprocessor's warnings are on by default and have no
options to control them.
! .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.
(Both forms have the same effect.)
! .Ip "\fB\-Wtrigraphs\fR" 4
.IX Item "-Wtrigraphs"
Warn if any trigraphs are encountered. This option used to take effect
only if \fB\-trigraphs\fR was also specified, but now works
independently. Warnings are not given for trigraphs within comments, as
they do not affect the meaning of the program.
! .Ip "\fB\-Wtraditional\fR" 4
.IX Item "-Wtraditional"
Warn about certain constructs that behave differently in traditional and
\&\s-1ISO\s0 C. Also warn about \s-1ISO\s0 C constructs that have no traditional C
equivalent, and problematic constructs which should be avoided.
! .Ip "\fB\-Wimport\fR" 4
.IX Item "-Wimport"
Warn the first time \fB#import\fR is used.
! .Ip "\fB\-Wundef\fR" 4
.IX Item "-Wundef"
Warn whenever an identifier which is not a macro is encountered in an
\&\fB#if\fR directive, outside of \fBdefined\fR. Such identifiers are
replaced with zero.
! .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.
--- 251,297 ----
default search order for system directories and the special treatment
of system headers are not defeated
\&.
! .IP "\fB\-o\fR \fIfile\fR" 4
.IX Item "-o file"
Write output to \fIfile\fR. This is the same as specifying \fIfile\fR
as the second non-option argument to \fBcpp\fR. \fBgcc\fR has a
different interpretation of a second non-option argument, so you must
use \fB\-o\fR to specify the output file.
! .IP "\fB\-Wall\fR" 4
.IX Item "-Wall"
Turns on all optional warnings which are desirable for normal code. At
present this is \fB\-Wcomment\fR and \fB\-Wtrigraphs\fR. Note that
many of the preprocessor's warnings are on by default and have no
options to control them.
! .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.
(Both forms have the same effect.)
! .IP "\fB\-Wtrigraphs\fR" 4
.IX Item "-Wtrigraphs"
Warn if any trigraphs are encountered. This option used to take effect
only if \fB\-trigraphs\fR was also specified, but now works
independently. Warnings are not given for trigraphs within comments, as
they do not affect the meaning of the program.
! .IP "\fB\-Wtraditional\fR" 4
.IX Item "-Wtraditional"
Warn about certain constructs that behave differently in traditional and
\&\s-1ISO\s0 C. Also warn about \s-1ISO\s0 C constructs that have no traditional C
equivalent, and problematic constructs which should be avoided.
! .IP "\fB\-Wimport\fR" 4
.IX Item "-Wimport"
Warn the first time \fB#import\fR is used.
! .IP "\fB\-Wundef\fR" 4
.IX Item "-Wundef"
Warn whenever an identifier which is not a macro is encountered in an
\&\fB#if\fR directive, outside of \fBdefined\fR. Such identifiers are
replaced with zero.
! .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.
*************** Alternatively, you could provide a dummy
*** 321,327 ****
\& #if defined the_macro_causing_the_warning
\& #endif
.Ve
! .Ip "\fB\-Wendif-labels\fR" 4
.IX Item "-Wendif-labels"
Warn whenever an \fB#else\fR or an \fB#endif\fR are followed by text.
This usually happens in code of the form
--- 311,317 ----
\& #if defined the_macro_causing_the_warning
\& #endif
.Ve
! .IP "\fB\-Wendif\-labels\fR" 4
.IX Item "-Wendif-labels"
Warn whenever an \fB#else\fR or an \fB#endif\fR are followed by text.
This usually happens in code of the form
*************** This usually happens in code of the form
*** 333,363 ****
\& ...
\& #endif FOO
.Ve
The second and third \f(CW\*(C`FOO\*(C'\fR should be in comments, but often are not
in older programs. This warning is on by default.
! .Ip "\fB\-Werror\fR" 4
.IX Item "-Werror"
Make all warnings into hard errors. Source code which triggers warnings
will be rejected.
! .Ip "\fB\-Wsystem-headers\fR" 4
.IX Item "-Wsystem-headers"
Issue warnings for code in system headers. These are normally unhelpful
in finding bugs in your own code, therefore suppressed. If you are
responsible for the system library, you may want to see them.
! .Ip "\fB\-w\fR" 4
.IX Item "-w"
Suppress all warnings, including those which \s-1GNU\s0 \s-1CPP\s0 issues by default.
! .Ip "\fB\-pedantic\fR" 4
.IX Item "-pedantic"
Issue all the mandatory diagnostics listed in the C standard. Some of
them are left out by default, since they trigger frequently on harmless
code.
! .Ip "\fB\-pedantic-errors\fR" 4
.IX Item "-pedantic-errors"
Issue all the mandatory diagnostics, and make all mandatory diagnostics
into errors. This includes mandatory diagnostics that \s-1GCC\s0 issues
without \fB\-pedantic\fR but treats as warnings.
! .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
--- 323,354 ----
\& ...
\& #endif FOO
.Ve
+ .Sp
The second and third \f(CW\*(C`FOO\*(C'\fR should be in comments, but often are not
in older programs. This warning is on by default.
! .IP "\fB\-Werror\fR" 4
.IX Item "-Werror"
Make all warnings into hard errors. Source code which triggers warnings
will be rejected.
! .IP "\fB\-Wsystem\-headers\fR" 4
.IX Item "-Wsystem-headers"
Issue warnings for code in system headers. These are normally unhelpful
in finding bugs in your own code, therefore suppressed. If you are
responsible for the system library, you may want to see them.
! .IP "\fB\-w\fR" 4
.IX Item "-w"
Suppress all warnings, including those which \s-1GNU\s0 \s-1CPP\s0 issues by default.
! .IP "\fB\-pedantic\fR" 4
.IX Item "-pedantic"
Issue all the mandatory diagnostics listed in the C standard. Some of
them are left out by default, since they trigger frequently on harmless
code.
! .IP "\fB\-pedantic\-errors\fR" 4
.IX Item "-pedantic-errors"
Issue all the mandatory diagnostics, and make all mandatory diagnostics
into errors. This includes mandatory diagnostics that \s-1GCC\s0 issues
without \fB\-pedantic\fR but treats as warnings.
! .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
*************** will still be sent to the regular output
*** 381,387 ****
.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,
--- 372,378 ----
.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,
*************** This implies that the choice of angle br
*** 391,397 ****
\&\fB#include\fR directive does not in itself determine whether that
header will appear in \fB\-MM\fR dependency output. This is a
slight change in semantics from \s-1GCC\s0 versions 3.0 and earlier.
! .Ip "\fB\-MF\fR \fIfile\fR" 4
.IX Item "-MF file"
@anchor{\-MF}
When used with \fB\-M\fR or \fB\-MM\fR, specifies a
--- 382,388 ----
\&\fB#include\fR directive does not in itself determine whether that
header will appear in \fB\-MM\fR dependency output. This is a
slight change in semantics from \s-1GCC\s0 versions 3.0 and earlier.
! .IP "\fB\-MF\fR \fIfile\fR" 4
.IX Item "-MF file"
@anchor{\-MF}
When used with \fB\-M\fR or \fB\-MM\fR, specifies a
*************** preprocessed output.
*** 401,407 ****
.Sp
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"
In conjunction with an option such as \fB\-M\fR requesting
dependency generation, \fB\-MG\fR assumes missing header files are
--- 392,398 ----
.Sp
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"
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
*** 412,418 ****
this useless.
.Sp
This feature is used in automatic updating of makefiles.
! .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
--- 403,409 ----
this useless.
.Sp
This feature is used in automatic updating of makefiles.
! .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
*************** This is typical output:
*** 424,433 ****
.Vb 1
\& test.o: test.c test.h
.Ve
.Vb 1
\& test.h:
.Ve
! .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, including any path,
--- 415,425 ----
.Vb 1
\& test.o: test.c test.h
.Ve
+ .Sp
.Vb 1
\& test.h:
.Ve
! .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, including any path,
*************** For example, \fB\-MT\ '$(objpfx)foo.o'\f
*** 443,449 ****
.Vb 1
\& $(objpfx)foo.o: foo.c
.Ve
! .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
--- 435,441 ----
.Vb 1
\& $(objpfx)foo.o: foo.c
.Ve
! .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
*************** Make. \fB\-MQ\ '$(objpfx)foo.o'\fR give
*** 451,459 ****
.Vb 1
\& $$(objpfx)foo.o: foo.c
.Ve
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
--- 443,452 ----
.Vb 1
\& $$(objpfx)foo.o: foo.c
.Ve
+ .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
*** 468,488 ****
.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\-x c\fR" 4
.IX Item "-x c"
.PD 0
! .Ip "\fB\-x c++\fR" 4
.IX Item "-x c++"
! .Ip "\fB\-x objective-c\fR" 4
.IX Item "-x objective-c"
! .Ip "\fB\-x assembler-with-cpp\fR" 4
.IX Item "-x assembler-with-cpp"
.PD
! Specify the source language: C, \*(C+, Objective-C, or assembly. This has
nothing to do with standards conformance or extensions; it merely
selects which base syntax to expect. If you give none of these options,
cpp will deduce the language from the extension of the source file:
--- 461,481 ----
.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\-x c\fR" 4
.IX Item "-x c"
.PD 0
! .IP "\fB\-x c++\fR" 4
.IX Item "-x c++"
! .IP "\fB\-x objective-c\fR" 4
.IX Item "-x objective-c"
! .IP "\fB\-x assembler-with-cpp\fR" 4
.IX Item "-x assembler-with-cpp"
.PD
! Specify the source language: C, \*(C+, Objective\-C, or assembly. This has
nothing to do with standards conformance or extensions; it merely
selects which base syntax to expect. If you give none of these options,
cpp will deduce the language from the extension of the source file:
*************** generic mode.
*** 495,504 ****
which selected both the language and the standards conformance level.
This option has been removed, because it conflicts with the \fB\-l\fR
option.
! .Ip "\fB\-std=\fR\fIstandard\fR" 4
.IX Item "-std=standard"
.PD 0
! .Ip "\fB\-ansi\fR" 4
.IX Item "-ansi"
.PD
Specify the standard to which the code should conform. Currently \s-1CPP\s0
--- 488,497 ----
which selected both the language and the standards conformance level.
This option has been removed, because it conflicts with the \fB\-l\fR
option.
! .IP "\fB\-std=\fR\fIstandard\fR" 4
.IX Item "-std=standard"
.PD 0
! .IP "\fB\-ansi\fR" 4
.IX Item "-ansi"
.PD
Specify the standard to which the code should conform. Currently \s-1CPP\s0
*************** knows about C and \*(C+ standards; other
*** 507,591 ****
\&\fIstandard\fR
may be one of:
.RS 4
! .if n .Ip "\f(CW""""iso9899:1990""""\fR" 4
! .el .Ip "\f(CWiso9899:1990\fR" 4
.IX Item "iso9899:1990"
.PD 0
! .if n .Ip "\f(CW""""c89""""\fR" 4
! .el .Ip "\f(CWc89\fR" 4
.IX Item "c89"
.PD
The \s-1ISO\s0 C standard from 1990. \fBc89\fR is the customary shorthand for
this version of the standard.
.Sp
The \fB\-ansi\fR option is equivalent to \fB\-std=c89\fR.
! .if n .Ip "\f(CW""""iso9899:199409""""\fR" 4
! .el .Ip "\f(CWiso9899:199409\fR" 4
.IX Item "iso9899:199409"
The 1990 C standard, as amended in 1994.
! .if n .Ip "\f(CW""""iso9899:1999""""\fR" 4
! .el .Ip "\f(CWiso9899:1999\fR" 4
.IX Item "iso9899:1999"
.PD 0
! .if n .Ip "\f(CW""""c99""""\fR" 4
! .el .Ip "\f(CWc99\fR" 4
.IX Item "c99"
! .if n .Ip "\f(CW""""iso9899:199x""""\fR" 4
! .el .Ip "\f(CWiso9899:199x\fR" 4
.IX Item "iso9899:199x"
! .if n .Ip "\f(CW""""c9x""""\fR" 4
! .el .Ip "\f(CWc9x\fR" 4
.IX Item "c9x"
.PD
The revised \s-1ISO\s0 C standard, published in December 1999. Before
publication, this was known as C9X.
! .if n .Ip "\f(CW""""gnu89""""\fR" 4
! .el .Ip "\f(CWgnu89\fR" 4
.IX Item "gnu89"
The 1990 C standard plus \s-1GNU\s0 extensions. This is the default.
! .if n .Ip "\f(CW""""gnu99""""\fR" 4
! .el .Ip "\f(CWgnu99\fR" 4
.IX Item "gnu99"
.PD 0
! .if n .Ip "\f(CW""""gnu9x""""\fR" 4
! .el .Ip "\f(CWgnu9x\fR" 4
.IX Item "gnu9x"
.PD
The 1999 C standard plus \s-1GNU\s0 extensions.
! .if n .Ip "\f(CW""""c++98""""\fR" 4
! .el .Ip "\f(CWc++98\fR" 4
.IX Item "c++98"
The 1998 \s-1ISO\s0 \*(C+ standard plus amendments.
! .if n .Ip "\f(CW""""gnu++98""""\fR" 4
! .el .Ip "\f(CWgnu++98\fR" 4
.IX Item "gnu++98"
The same as \fB\-std=c++98\fR plus \s-1GNU\s0 extensions. This is the
default for \*(C+ code.
.RE
.RS 4
.RE
! .Ip "\fB\-I-\fR" 4
.IX Item "-I-"
Split the include path. 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.
! .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\-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\-include\fR \fIfile\fR" 4
.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
--- 500,584 ----
\&\fIstandard\fR
may be one of:
.RS 4
! .ie n .IP """iso9899:1990""" 4
! .el .IP "\f(CWiso9899:1990\fR" 4
.IX Item "iso9899:1990"
.PD 0
! .ie n .IP """c89""" 4
! .el .IP "\f(CWc89\fR" 4
.IX Item "c89"
.PD
The \s-1ISO\s0 C standard from 1990. \fBc89\fR is the customary shorthand for
this version of the standard.
.Sp
The \fB\-ansi\fR option is equivalent to \fB\-std=c89\fR.
! .ie n .IP """iso9899:199409""" 4
! .el .IP "\f(CWiso9899:199409\fR" 4
.IX Item "iso9899:199409"
The 1990 C standard, as amended in 1994.
! .ie n .IP """iso9899:1999""" 4
! .el .IP "\f(CWiso9899:1999\fR" 4
.IX Item "iso9899:1999"
.PD 0
! .ie n .IP """c99""" 4
! .el .IP "\f(CWc99\fR" 4
.IX Item "c99"
! .ie n .IP """iso9899:199x""" 4
! .el .IP "\f(CWiso9899:199x\fR" 4
.IX Item "iso9899:199x"
! .ie n .IP """c9x""" 4
! .el .IP "\f(CWc9x\fR" 4
.IX Item "c9x"
.PD
The revised \s-1ISO\s0 C standard, published in December 1999. Before
publication, this was known as C9X.
! .ie n .IP """gnu89""" 4
! .el .IP "\f(CWgnu89\fR" 4
.IX Item "gnu89"
The 1990 C standard plus \s-1GNU\s0 extensions. This is the default.
! .ie n .IP """gnu99""" 4
! .el .IP "\f(CWgnu99\fR" 4
.IX Item "gnu99"
.PD 0
! .ie n .IP """gnu9x""" 4
! .el .IP "\f(CWgnu9x\fR" 4
.IX Item "gnu9x"
.PD
The 1999 C standard plus \s-1GNU\s0 extensions.
! .ie n .IP """c++98""" 4
! .el .IP "\f(CWc++98\fR" 4
.IX Item "c++98"
The 1998 \s-1ISO\s0 \*(C+ standard plus amendments.
! .ie n .IP """gnu++98""" 4
! .el .IP "\f(CWgnu++98\fR" 4
.IX Item "gnu++98"
The same as \fB\-std=c++98\fR plus \s-1GNU\s0 extensions. This is the
default for \*(C+ code.
.RE
.RS 4
.RE
! .IP "\fB\-I\-\fR" 4
.IX Item "-I-"
Split the include path. 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.
! .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\-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\-include\fR \fIfile\fR" 4
.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
*************** chain as normal.
*** 596,602 ****
.Sp
If multiple \fB\-include\fR options are given, the files are included
in the order they appear on the command line.
! .Ip "\fB\-imacros\fR \fIfile\fR" 4
.IX Item "-imacros file"
Exactly like \fB\-include\fR, except that any output produced by
scanning \fIfile\fR is thrown away. Macros it defines remain defined.
--- 589,595 ----
.Sp
If multiple \fB\-include\fR options are given, the files are included
in the order they appear on the command line.
! .IP "\fB\-imacros\fR \fIfile\fR" 4
.IX Item "-imacros file"
Exactly like \fB\-include\fR, except that any output produced by
scanning \fIfile\fR is thrown away. Macros it defines remain defined.
*************** processing its declarations.
*** 605,624 ****
.Sp
All files specified by \fB\-imacros\fR are processed before all files
specified by \fB\-include\fR.
! .Ip "\fB\-idirafter\fR \fIdir\fR" 4
.IX Item "-idirafter dir"
Search \fIdir\fR for header files, but do it \fIafter\fR all
directories specified with \fB\-I\fR and the standard system directories
have been exhausted. \fIdir\fR is treated as a system include directory.
! .Ip "\fB\-iprefix\fR \fIprefix\fR" 4
.IX Item "-iprefix prefix"
Specify \fIprefix\fR as the prefix for subsequent \fB\-iwithprefix\fR
options. If the prefix represents a directory, you should include the
final \fB/\fR.
! .Ip "\fB\-iwithprefix\fR \fIdir\fR" 4
.IX Item "-iwithprefix dir"
.PD 0
! .Ip "\fB\-iwithprefixbefore\fR \fIdir\fR" 4
.IX Item "-iwithprefixbefore dir"
.PD
Append \fIdir\fR to the prefix specified previously with
--- 598,617 ----
.Sp
All files specified by \fB\-imacros\fR are processed before all files
specified by \fB\-include\fR.
! .IP "\fB\-idirafter\fR \fIdir\fR" 4
.IX Item "-idirafter dir"
Search \fIdir\fR for header files, but do it \fIafter\fR all
directories specified with \fB\-I\fR and the standard system directories
have been exhausted. \fIdir\fR is treated as a system include directory.
! .IP "\fB\-iprefix\fR \fIprefix\fR" 4
.IX Item "-iprefix prefix"
Specify \fIprefix\fR as the prefix for subsequent \fB\-iwithprefix\fR
options. If the prefix represents a directory, you should include the
final \fB/\fR.
! .IP "\fB\-iwithprefix\fR \fIdir\fR" 4
.IX Item "-iwithprefix dir"
.PD 0
! .IP "\fB\-iwithprefixbefore\fR \fIdir\fR" 4
.IX Item "-iwithprefixbefore dir"
.PD
Append \fIdir\fR to the prefix specified previously with
*************** path. \fB\-iwithprefixbefore\fR puts it
*** 627,639 ****
would; \fB\-iwithprefix\fR puts it where \fB\-idirafter\fR would.
.Sp
Use of these options is discouraged.
! .Ip "\fB\-isystem\fR \fIdir\fR" 4
.IX Item "-isystem dir"
Search \fIdir\fR for header files, after all directories specified by
\&\fB\-I\fR 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.
! .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
--- 620,632 ----
would; \fB\-iwithprefix\fR puts it where \fB\-idirafter\fR would.
.Sp
Use of these options is discouraged.
! .IP "\fB\-isystem\fR \fIdir\fR" 4
.IX Item "-isystem dir"
Search \fIdir\fR for header files, after all directories specified by
\&\fB\-I\fR 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.
! .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.
*** 646,674 ****
\&\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\-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\-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\-A\fR \fIpredicate\fR\fB=\fR\fIanswer\fR" 4
.IX Item "-A predicate=answer"
Make an assertion with the predicate \fIpredicate\fR and answer
\&\fIanswer\fR. This form is preferred to the older form \fB\-A\fR
\&\fIpredicate\fR\fB(\fR\fIanswer\fR\fB)\fR, 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\-dCHARS\fR" 4
.IX Item "-dCHARS"
\&\fI\s-1CHARS\s0\fR is a sequence of one or more of the following characters,
and must not be preceded by a space. Other characters are interpreted
--- 639,667 ----
\&\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\-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\-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\-A\fR \fIpredicate\fR\fB=\fR\fIanswer\fR" 4
.IX Item "-A predicate=answer"
Make an assertion with the predicate \fIpredicate\fR and answer
\&\fIanswer\fR. This form is preferred to the older form \fB\-A\fR
\&\fIpredicate\fR\fB(\fR\fIanswer\fR\fB)\fR, 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\-dCHARS\fR" 4
.IX Item "-dCHARS"
\&\fI\s-1CHARS\s0\fR is a sequence of one or more of the following characters,
and must not be preceded by a space. Other characters are interpreted
*************** by the compiler proper, or reserved for
*** 676,682 ****
are silently ignored. If you specify characters whose behavior
conflicts, the result is undefined.
.RS 4
! .Ip "\fBM\fR" 4
.IX Item "M"
Instead of the normal output, generate a list of \fB#define\fR
directives for all the macros defined during the execution of the
--- 669,675 ----
are silently ignored. If you specify characters whose behavior
conflicts, the result is undefined.
.RS 4
! .IP "\fBM\fR" 4
.IX Item "M"
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
*** 687,716 ****
.Vb 1
\& touch foo.h; cpp -dM foo.h
.Ve
will show all the predefined macros.
! .Ip "\fBD\fR" 4
.IX Item "D"
Like \fBM\fR except in two respects: it does \fInot\fR include the
predefined macros, and 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 "\fBN\fR" 4
.IX Item "N"
Like \fBD\fR, but emit only the macro names, not their expansions.
! .Ip "\fBI\fR" 4
.IX Item "I"
Output \fB#include\fR directives in addition to the result of
preprocessing.
.RE
.RS 4
.RE
! .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\-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
--- 680,710 ----
.Vb 1
\& touch foo.h; cpp -dM foo.h
.Ve
+ .Sp
will show all the predefined macros.
! .IP "\fBD\fR" 4
.IX Item "D"
Like \fBM\fR except in two respects: it does \fInot\fR include the
predefined macros, and 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 "\fBN\fR" 4
.IX Item "N"
Like \fBD\fR, but emit only the macro names, not their expansions.
! .IP "\fBI\fR" 4
.IX Item "I"
Output \fB#include\fR directives in addition to the result of
preprocessing.
.RE
.RS 4
.RE
! .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\-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
*** 721,727 ****
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
--- 715,721 ----
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 w
*** 729,772 ****
.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\-traditional-cpp\fR" 4
.IX Item "-traditional-cpp"
Try to imitate the behavior of old-fashioned C preprocessors, as
opposed to \s-1ISO\s0 C preprocessors.
! .Ip "\fB\-trigraphs\fR" 4
.IX Item "-trigraphs"
Process trigraph sequences.
! .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 \s-1MS-DOS\s0.
! .Ip "\fB\*(--help\fR" 4
! .IX Item "help"
.PD 0
! .Ip "\fB\*(--target-help\fR" 4
! .IX Item "target-help"
.PD
Print text describing all the command line options instead of
preprocessing anything.
! .Ip "\fB\-v\fR" 4
.IX Item "-v"
Verbose mode. Print out \s-1GNU\s0 \s-1CPP\s0's version number at the beginning of
execution, and report the final form of the include path.
! .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.
! .Ip "\fB\-version\fR" 4
.IX Item "-version"
.PD 0
! .Ip "\fB\*(--version\fR" 4
! .IX Item "version"
.PD
Print out \s-1GNU\s0 \s-1CPP\s0's version number. With one dash, proceed to
preprocess as normal. With two dashes, exit immediately.
--- 723,766 ----
.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\-traditional\-cpp\fR" 4
.IX Item "-traditional-cpp"
Try to imitate the behavior of old-fashioned C preprocessors, as
opposed to \s-1ISO\s0 C preprocessors.
! .IP "\fB\-trigraphs\fR" 4
.IX Item "-trigraphs"
Process trigraph sequences.
! .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 \s-1MS\-DOS\s0.
! .IP "\fB\-\-help\fR" 4
! .IX Item "--help"
.PD 0
! .IP "\fB\-\-target\-help\fR" 4
! .IX Item "--target-help"
.PD
Print text describing all the command line options instead of
preprocessing anything.
! .IP "\fB\-v\fR" 4
.IX Item "-v"
Verbose mode. Print out \s-1GNU\s0 \s-1CPP\s0's version number at the beginning of
execution, and report the final form of the include path.
! .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.
! .IP "\fB\-version\fR" 4
.IX Item "-version"
.PD 0
! .IP "\fB\-\-version\fR" 4
! .IX Item "--version"
.PD
Print out \s-1GNU\s0 \s-1CPP\s0's version number. With one dash, proceed to
preprocess as normal. With two dashes, exit immediately.
*************** Note that you can also specify places to
*** 781,794 ****
\&\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
--- 775,788 ----
\&\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
*************** search its current working directory. E
*** 812,818 ****
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
--- 806,812 ----
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
*************** file \fIfile\fR using \fItarget\fR as th
*** 828,834 ****
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
--- 822,828 ----
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
*************** except that system header files are not
*** 836,842 ****
main input file is omitted.
.SH "SEE ALSO"
.IX Header "SEE ALSO"
! \&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf-funding\fR\|(7),
\&\fIgcc\fR\|(1), \fIas\fR\|(1), \fIld\fR\|(1), and the Info entries for \fIcpp\fR, \fIgcc\fR, and
\&\fIbinutils\fR.
.SH "COPYRIGHT"
--- 830,836 ----
main input file is omitted.
.SH "SEE ALSO"
.IX Header "SEE ALSO"
! \&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf\-funding\fR\|(7),
\&\fIgcc\fR\|(1), \fIas\fR\|(1), \fIld\fR\|(1), and the Info entries for \fIcpp\fR, \fIgcc\fR, and
\&\fIbinutils\fR.
.SH "COPYRIGHT"
*************** This manual contains no Invariant Sectio
*** 858,863 ****
--- 852,858 ----
.Vb 1
\& A GNU Manual
.Ve
+ .PP
(b) The \s-1FSF\s0's Back-Cover Text is:
.PP
.Vb 3
diff -Nrc3pad gcc-3.3.4/gcc/doc/cpp.info gcc-3.3.5/gcc/doc/cpp.info
*** gcc-3.3.4/gcc/doc/cpp.info 2004-05-31 22:43:08.000000000 +0000
--- gcc-3.3.5/gcc/doc/cpp.info 2004-09-30 17:38:12.000000000 +0000
***************
*** 1,5 ****
! Ceci est le fichier Info doc/cpp.info, produit par Makeinfo version 4.6
! à partir doc/cpp.texi.
Copyright (C) 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
--- 1,5 ----
! This is doc/cpp.info, produced by makeinfo version 4.5 from
! doc/cpp.texi.
Copyright (C) 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
*************** File: cpp.info, Node: Top, Next: Overv
*** 32,38 ****
! The C preprocessor implements the macro language used to transform C,
C++, and Objective-C programs before they are compiled. It can also be
useful on its own.
--- 32,38 ----
! The C preprocessor implements the macro language used to transform C,
C++, and Objective-C programs before they are compiled. It can also be
useful on its own.
*************** File: cpp.info, Node: Overview, Next:
*** 157,164 ****
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.
--- 157,164 ----
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.
*************** File: cpp.info, Node: Initial processin
*** 216,222 ****
Initial processing
==================
! The preprocessor performs a series of textual transformations on its
input. These happen before all other processing. Conceptually, they
happen in a rigid order, and the entire file is run through each
transformation before the next one begins. CPP actually does them all
--- 216,222 ----
Initial processing
==================
! The preprocessor performs a series of textual transformations on its
input. These happen before all other processing. Conceptually, they
happen in a rigid order, and the entire file is run through each
transformation before the next one begins. CPP actually does them all
*************** File: cpp.info, Node: Tokenization, Ne
*** 358,364 ****
Tokenization
============
! 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
--- 358,364 ----
Tokenization
============
! 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
*************** File: cpp.info, Node: The preprocessing
*** 506,516 ****
The preprocessing language
==========================
! 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:
--- 506,516 ----
The preprocessing language
==========================
! 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:
*************** File: cpp.info, Node: Header Files, Ne
*** 569,578 ****
Header Files
************
! 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.
--- 569,578 ----
Header Files
************
! 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.
*************** File: cpp.info, Node: Include Syntax,
*** 617,624 ****
Include Syntax
==============
! Both user and system header files are included using the preprocessing
! directive `#include'. It has two variants:
`#include '
This variant is used for system header files. It searches for a
--- 617,624 ----
Include Syntax
==============
! Both user and system header files are included using the
! preprocessing directive `#include'. It has two variants:
`#include '
This variant is used for system header files. It searches for a
*************** File: cpp.info, Node: Include Operation
*** 653,660 ****
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
--- 653,660 ----
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
*************** File: cpp.info, Node: Search Path, Nex
*** 711,717 ****
Search Path
===========
! GCC looks in several different places for headers. On a normal Unix
system, if you do not instruct it otherwise, it will look for headers
requested with `#include ' in:
--- 711,717 ----
Search Path
===========
! GCC looks in several different places for headers. On a normal Unix
system, if you do not instruct it otherwise, it will look for headers
requested with `#include ' in:
*************** File: cpp.info, Node: Once-Only Headers
*** 779,788 ****
Once-Only Headers
=================
! If a header file happens to be included twice, the compiler will process
! its contents twice. This is very likely to cause an error, e.g. when
! the compiler sees the same structure definition twice. Even if it does
! not, it will certainly waste time.
The standard way to prevent this is to enclose the entire real
contents of the file in a conditional, like this:
--- 779,788 ----
Once-Only Headers
=================
! If a header file happens to be included twice, the compiler will
! process its contents twice. This is very likely to cause an error,
! e.g. when the compiler sees the same structure definition twice. Even
! if it does not, it will certainly waste time.
The standard way to prevent this is to enclose the entire real
contents of the file in a conditional, like this:
*************** File: cpp.info, Node: Computed Includes
*** 821,827 ****
Computed Includes
=================
! Sometimes it is necessary to select one of several different header
files to be included into your program. They might specify
configuration parameters to be used on different sorts of operating
systems, for instance. You could do this with a series of conditionals,
--- 821,827 ----
Computed Includes
=================
! Sometimes it is necessary to select one of several different header
files to be included into your program. They might specify
configuration parameters to be used on different sorts of operating
systems, for instance. You could do this with a series of conditionals,
*************** File: cpp.info, Node: Wrapper Headers,
*** 895,901 ****
Wrapper Headers
===============
! 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
--- 895,901 ----
Wrapper Headers
===============
! 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
*************** File: cpp.info, Node: System Headers,
*** 946,952 ****
System Headers
==============
! 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
--- 946,952 ----
System Headers
==============
! 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
*************** File: cpp.info, Node: Macros, Next: Co
*** 989,999 ****
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
--- 989,999 ----
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
*************** File: cpp.info, Node: Object-like Macro
*** 1022,1030 ****
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
--- 1022,1030 ----
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
*************** File: cpp.info, Node: Function-like Mac
*** 1124,1133 ****
Function-like Macros
====================
! 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()
--- 1124,1133 ----
Function-like Macros
====================
! 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()
*************** File: cpp.info, Node: Macro Arguments,
*** 1168,1174 ****
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
--- 1168,1174 ----
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
*************** File: cpp.info, Node: Stringification,
*** 1261,1267 ****
Stringification
===============
! 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
--- 1261,1267 ----
Stringification
===============
! 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
*************** File: cpp.info, Node: Concatenation, N
*** 1339,1347 ****
Concatenation
=============
! 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
--- 1339,1347 ----
Concatenation
=============
! 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
*************** File: cpp.info, Node: Variadic Macros,
*** 1413,1421 ****
Variadic Macros
===============
! A macro can be declared to accept a variable number of arguments much as
! a function can. The syntax for defining the macro is similar to that of
! a function. Here is an example:
#define eprintf(...) fprintf (stderr, __VA_ARGS__)
--- 1413,1421 ----
Variadic Macros
===============
! A macro can be declared to accept a variable number of arguments
! much as a function can. The syntax for defining the macro is similar
! to that of a function. Here is an example:
#define eprintf(...) fprintf (stderr, __VA_ARGS__)
*************** File: cpp.info, Node: Predefined Macros
*** 1518,1524 ****
Predefined Macros
=================
! Several object-like macros are predefined; you use them without
supplying their definitions. They fall into three classes: standard,
common, and system-specific.
--- 1518,1524 ----
Predefined Macros
=================
! Several object-like macros are predefined; you use them without
supplying their definitions. They fall into three classes: standard,
common, and system-specific.
*************** File: cpp.info, Node: Standard Predefin
*** 1538,1547 ****
Standard Predefined Macros
--------------------------
! The standard predefined macros are specified by the relevant language
! standards, so they are available with all compilers that implement
! those 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
--- 1538,1547 ----
Standard Predefined Macros
--------------------------
! The standard predefined macros are specified by the relevant
! language standards, so they are available with all compilers that
! implement those 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
*************** File: cpp.info, Node: Common Predefined
*** 1669,1677 ****
Common Predefined Macros
------------------------
! The common predefined macros are GNU C extensions. They are available
! with the same meanings regardless of the machine or operating system on
! which you are using GNU C. Their names all start with double
underscores.
`__GNUC__'
--- 1669,1677 ----
Common Predefined Macros
------------------------
! The common predefined macros are GNU C extensions. They are
! available with the same meanings regardless of the machine or operating
! system on which you are using GNU C. Their names all start with double
underscores.
`__GNUC__'
*************** File: cpp.info, Node: System-specific P
*** 1848,1858 ****
System-specific Predefined Macros
---------------------------------
! 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 the constant 1, so you can test them with
either `#ifdef' or `#if'.
--- 1848,1858 ----
System-specific Predefined Macros
---------------------------------
! 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 the constant 1, so you can test them with
either `#ifdef' or `#if'.
*************** File: cpp.info, Node: C++ Named Operato
*** 1886,1898 ****
C++ Named Operators
-------------------
! 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:
--- 1886,1898 ----
C++ Named Operators
-------------------
! 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:
*************** File: cpp.info, Node: Undefining and Re
*** 1915,1923 ****
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.
--- 1915,1923 ----
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.
*************** File: cpp.info, Node: Directives Within
*** 1967,1975 ****
Directives Within Macro Arguments
=================================
! Occasionally it is convenient to use preprocessor directives within the
! arguments of a macro. The C and C++ standards declare that behavior in
! these cases is undefined.
Versions of CPP prior to 3.2 would reject such constructs with an
error message. This was the only syntactic difference between normal
--- 1967,1975 ----
Directives Within Macro Arguments
=================================
! Occasionally it is convenient to use preprocessor directives within
! the arguments of a macro. The C and C++ standards declare that
! behavior in these cases is undefined.
Versions of CPP prior to 3.2 would reject such constructs with an
error message. This was the only syntactic difference between normal
*************** File: cpp.info, Node: Macro Pitfalls,
*** 2007,2014 ****
Macro Pitfalls
==============
! In this section we describe some special rules that apply to macros and
! macro expansion, and point out certain cases in which the rules have
counter-intuitive consequences that you must watch out for.
* Menu:
--- 2007,2014 ----
Macro Pitfalls
==============
! In this section we describe some special rules that apply to macros
! and macro expansion, and point out certain cases in which the rules have
counter-intuitive consequences that you must watch out for.
* Menu:
*************** File: cpp.info, Node: Misnesting, Next
*** 2027,2033 ****
Misnesting
----------
! When a macro is called with arguments, the arguments are substituted
into the macro body and the result is checked, together with the rest of
the input file, for more macro calls. It is possible to piece together
a macro call coming partially from the macro body and partially from the
--- 2027,2033 ----
Misnesting
----------
! When a macro is called with arguments, the arguments are substituted
into the macro body and the result is checked, together with the rest of
the input file, for more macro calls. It is possible to piece together
a macro call coming partially from the macro body and partially from the
*************** File: cpp.info, Node: Operator Preceden
*** 2059,2069 ****
Operator Precedence Problems
----------------------------
! You may have noticed that in most of the macro definition examples shown
! above, each occurrence of a macro argument name had parentheses around
! it. In addition, another pair of parentheses usually surround the
! entire macro definition. Here is why it is best to write macros that
! way.
Suppose you define a macro as follows,
--- 2059,2069 ----
Operator Precedence Problems
----------------------------
! You may have noticed that in most of the macro definition examples
! shown above, each occurrence of a macro argument name had parentheses
! around it. In addition, another pair of parentheses usually surround
! the entire macro definition. Here is why it is best to write macros
! that way.
Suppose you define a macro as follows,
*************** File: cpp.info, Node: Swallowing the Se
*** 2113,2119 ****
Swallowing the Semicolon
------------------------
! 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:
--- 2113,2119 ----
Swallowing the Semicolon
------------------------
! 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:
*************** File: cpp.info, Node: Duplication of Si
*** 2169,2175 ****
Duplication of Side Effects
---------------------------
! Many C programs define a macro `min', for "minimum", like this:
#define min(X, Y) ((X) < (Y) ? (X) : (Y))
--- 2169,2175 ----
Duplication of Side Effects
---------------------------
! Many C programs define a macro `min', for "minimum", like this:
#define min(X, Y) ((X) < (Y) ? (X) : (Y))
*************** File: cpp.info, Node: Self-Referential
*** 2228,2239 ****
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
! self-reference is not considered a macro call. It is passed into the
! preprocessor output unchanged. Let's consider an example:
#define foo (4 + foo)
--- 2228,2239 ----
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 self-reference is not considered a macro call. It is passed into
! the preprocessor output unchanged. Let's consider an example:
#define foo (4 + foo)
*************** File: cpp.info, Node: Argument Prescan,
*** 2289,2295 ****
Argument Prescan
----------------
! Macro arguments are completely macro-expanded before they are
substituted into a macro body, unless they are stringified or pasted
with other tokens. After substitution, the entire macro body, including
the substituted arguments, is scanned again for macros to be expanded.
--- 2289,2295 ----
Argument Prescan
----------------
! Macro arguments are completely macro-expanded before they are
substituted into a macro body, unless they are stringified or pasted
with other tokens. After substitution, the entire macro body, including
the substituted arguments, is scanned again for macros to be expanded.
*************** File: cpp.info, Node: Newlines in Argum
*** 2376,2382 ****
Newlines in Arguments
---------------------
! The invocation of a function-like macro can extend over many logical
lines. However, in the present implementation, the entire expansion
comes out on one line. Thus line numbers emitted by the compiler or
debugger refer to the line the invocation started on, which might be
--- 2376,2382 ----
Newlines in Arguments
---------------------
! The invocation of a function-like macro can extend over many logical
lines. However, in the present implementation, the entire expansion
comes out on one line. Thus line numbers emitted by the compiler or
debugger refer to the line the invocation started on, which might be
*************** File: cpp.info, Node: Conditionals, Ne
*** 2402,2408 ****
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
--- 2402,2408 ----
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
*************** File: cpp.info, Node: Conditional Uses,
*** 2443,2449 ****
Conditional Uses
================
! 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
--- 2443,2449 ----
Conditional Uses
================
! 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
*************** File: cpp.info, Node: Conditional Synta
*** 2474,2480 ****
Conditional Syntax
==================
! A conditional in the C preprocessor begins with a "conditional
directive": `#if', `#ifdef' or `#ifndef'.
* Menu:
--- 2474,2480 ----
Conditional Syntax
==================
! A conditional in the C preprocessor begins with a "conditional
directive": `#if', `#ifdef' or `#ifndef'.
* Menu:
*************** File: cpp.info, Node: Ifdef, Next: If,
*** 2491,2497 ****
Ifdef
-----
! The simplest sort of conditional is
#ifdef MACRO
--- 2491,2497 ----
Ifdef
-----
! The simplest sort of conditional is
#ifdef MACRO
*************** File: cpp.info, Node: If, Next: Define
*** 2563,2569 ****
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
--- 2563,2569 ----
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
*************** File: cpp.info, Node: Defined, Next: E
*** 2624,2634 ****
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
--- 2624,2634 ----
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
*************** File: cpp.info, Node: Else, Next: Elif
*** 2659,2665 ****
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:
--- 2659,2665 ----
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:
*************** File: cpp.info, Node: Elif, Prev: Else
*** 2680,2687 ****
Elif
----
! One common case of nested conditionals is used to check for more than
! two possible alternatives. For example, you might have
#if X == 1
...
--- 2680,2687 ----
Elif
----
! One common case of nested conditionals is used to check for more
! than two possible alternatives. For example, you might have
#if X == 1
...
*************** File: cpp.info, Node: Deleted Code, Pr
*** 2725,2732 ****
Deleted Code
============
! If you replace or delete a part of the program but want to keep the old
! code around for future reference, you often cannot simply comment it
out. Block comments do not nest, so the first comment inside the old
code will end the commenting-out. The probable result is a flood of
syntax errors.
--- 2725,2732 ----
Deleted Code
============
! If you replace or delete a part of the program but want to keep the
! old code around for future reference, you often cannot simply comment it
out. Block comments do not nest, so the first comment inside the old
code will end the commenting-out. The probable result is a flood of
syntax errors.
*************** File: cpp.info, Node: Diagnostics, Nex
*** 2753,2761 ****
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
--- 2753,2761 ----
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
*************** File: cpp.info, Node: Line Control, Ne
*** 2793,2803 ****
Line Control
************
! The C preprocessor informs the C compiler of the location in your source
! code where each token came from. Presently, this is just the file name
! and line number. All the tokens resulting from macro expansion are
! reported as having appeared on the line of the source file where the
! 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
--- 2793,2804 ----
Line Control
************
! The C preprocessor informs the C compiler of the location in your
! source code where each token came from. Presently, this is just the
! file name and line number. All the tokens resulting from macro
! expansion are reported as having appeared on the line of the source
! file where the 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
*************** File: cpp.info, Node: Pragmas, Next: O
*** 2871,2878 ****
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. Three forms of this directive
(commonly known as "pragmas") are specified by the 1999 C standard. A
C compiler is free to attach any meaning it likes to other pragmas.
--- 2872,2879 ----
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. Three forms of this directive
(commonly known as "pragmas") are specified by the 1999 C standard. A
C compiler is free to attach any meaning it likes to other pragmas.
*************** File: cpp.info, Node: Other Directives,
*** 2969,2977 ****
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.
This directive is not part of the C standard, but it is not an
official GNU extension either. We believe it came from System V.
--- 2970,2978 ----
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.
This directive is not part of the C standard, but it is not an
official GNU extension either. We believe it came from System V.
*************** File: cpp.info, Node: Preprocessor Outp
*** 2995,3001 ****
Preprocessor Output
*******************
! When the C preprocessor is used with the C, C++, or Objective-C
compilers, it is integrated into the compiler and communicates a stream
of binary tokens directly to the compiler's parser. However, it can
also be used in the more conventional standalone mode, where it produces
--- 2996,3002 ----
Preprocessor Output
*******************
! When the C preprocessor is used with the C, C++, or Objective-C
compilers, it is integrated into the compiler and communicates a stream
of binary tokens directly to the compiler's parser. However, it can
also be used in the more conventional standalone mode, where it produces
*************** File: cpp.info, Node: Traditional Mode,
*** 3068,3075 ****
Traditional Mode
****************
! Traditional (pre-standard) C preprocessing is rather different from the
! preprocessing specified by the standard. When GCC is given the
`-traditional-cpp' option, it attempts to emulate a traditional
preprocessor.
--- 3069,3076 ----
Traditional Mode
****************
! Traditional (pre-standard) C preprocessing is rather different from
! the preprocessing specified by the standard. When GCC is given the
`-traditional-cpp' option, it attempts to emulate a traditional
preprocessor.
*************** File: cpp.info, Node: Traditional lexic
*** 3097,3103 ****
Traditional lexical analysis
============================
! The traditional preprocessor does not decompose its input into tokens
the same way a standards-conforming preprocessor does. The input is
simply treated as a stream of text with minimal internal form.
--- 3098,3104 ----
Traditional lexical analysis
============================
! The traditional preprocessor does not decompose its input into tokens
the same way a standards-conforming preprocessor does. The input is
simply treated as a stream of text with minimal internal form.
*************** File: cpp.info, Node: Traditional macro
*** 3159,3165 ****
Traditional macros
==================
! The major difference between traditional and ISO macros is that the
former expand to text rather than to a token sequence. CPP removes all
leading and trailing horizontal whitespace from a macro's replacement
text before storing it, but preserves the form of internal whitespace.
--- 3160,3166 ----
Traditional macros
==================
! The major difference between traditional and ISO macros is that the
former expand to text rather than to a token sequence. CPP removes all
leading and trailing horizontal whitespace from a macro's replacement
text before storing it, but preserves the form of internal whitespace.
*************** File: cpp.info, Node: Traditional misce
*** 3245,3251 ****
Traditional miscellany
======================
! Here are some things to be aware of when using the traditional
preprocessor.
* Preprocessing directives are recognized only when their leading
--- 3246,3252 ----
Traditional miscellany
======================
! Here are some things to be aware of when using the traditional
preprocessor.
* Preprocessing directives are recognized only when their leading
*************** File: cpp.info, Node: Traditional warni
*** 3273,3279 ****
Traditional warnings
====================
! 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.
--- 3274,3280 ----
Traditional warnings
====================
! 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.
*************** File: cpp.info, Node: Implementation De
*** 3319,3325 ****
Implementation Details
**********************
! Here we document details of how the preprocessor's implementation
affects its user-visible behavior. You should try to avoid undue
reliance on behavior described here, as it is possible that it will
change subtly in future implementations.
--- 3320,3326 ----
Implementation Details
**********************
! Here we document details of how the preprocessor's implementation
affects its user-visible behavior. You should try to avoid undue
reliance on behavior described here, as it is possible that it will
change subtly in future implementations.
*************** File: cpp.info, Node: Implementation-de
*** 3340,3349 ****
Implementation-defined behavior
===============================
! 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.
--- 3341,3350 ----
Implementation-defined behavior
===============================
! 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.
*************** File: cpp.info, Node: Implementation li
*** 3408,3414 ****
Implementation limits
=====================
! CPP has a small number of internal limits. This section lists the
limits which the C standard requires to be no lower than some minimum,
and all the others we are aware of. We intend there to be as few limits
as possible. If you encounter an undocumented or inconvenient limit,
--- 3409,3415 ----
Implementation limits
=====================
! CPP has a small number of internal limits. This section lists the
limits which the C standard requires to be no lower than some minimum,
and all the others we are aware of. We intend there to be as few limits
as possible. If you encounter an undocumented or inconvenient limit,
*************** File: cpp.info, Node: Obsolete Features
*** 3475,3483 ****
Obsolete Features
=================
! CPP has a number of features which are present mainly for compatibility
! with older programs. We discourage their use in new code. In some
! cases, we plan to remove the feature in a future version of GCC.
* Menu:
--- 3476,3484 ----
Obsolete Features
=================
! CPP has a number of features which are present mainly for
! compatibility with older programs. We discourage their use in new code.
! In some cases, we plan to remove the feature in a future version of GCC.
* Menu:
*************** File: cpp.info, Node: Assertions, Next
*** 3490,3496 ****
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.
--- 3491,3497 ----
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.
*************** File: cpp.info, Node: Obsolete once-onl
*** 3556,3562 ****
Obsolete once-only headers
--------------------------
! 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.
--- 3557,3563 ----
Obsolete once-only headers
--------------------------
! 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.
*************** File: cpp.info, Node: Differences from
*** 3594,3602 ****
Differences from previous versions
==================================
! This section details behavior which has changed from previous versions
! of CPP. We do not plan to change it again in the near future, but we
! do not promise not to, either.
The "previous versions" discussed here are 2.95 and before. The
behavior of GCC 3.0 is mostly the same as the behavior of the widely
--- 3595,3603 ----
Differences from previous versions
==================================
! This section details behavior which has changed from previous
! versions of CPP. We do not plan to change it again in the near future,
! but we do not promise not to, either.
The "previous versions" discussed here are 2.95 and before. The
behavior of GCC 3.0 is mostly the same as the behavior of the widely
*************** File: cpp.info, Node: Invocation, Next
*** 3681,3692 ****
Invocation
**********
! Most often when you use the C preprocessor you will not have to invoke
! it explicitly: the C compiler will do so automatically. However, the
! preprocessor is sometimes useful on its own. All the options listed
! here are also acceptable to the C compiler and have the same meaning,
! except that the C compiler has different rules for specifying the output
! file.
*Note:* Whether you use the preprocessor by way of `gcc' or `cpp',
the "compiler driver" is run first. This program's purpose is to
--- 3682,3693 ----
Invocation
**********
! Most often when you use the C preprocessor you will not have to
! invoke it explicitly: the C compiler will do so automatically.
! However, the preprocessor is sometimes useful on its own. All the
! options listed here are also acceptable to the C compiler and have the
! same meaning, except that the C compiler has different rules for
! specifying the output file.
*Note:* Whether you use the preprocessor by way of `gcc' or `cpp',
the "compiler driver" is run first. This program's purpose is to
*************** File: cpp.info, Node: Environment Varia
*** 4209,4215 ****
Environment Variables
*********************
! 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.
--- 4210,4216 ----
Environment Variables
*********************
! 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.
*************** GNU Free Documentation License
*** 4672,4678 ****
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 page:
--- 4673,4679 ----
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 page:
*************** Concept Index
*** 4926,5000 ****
Tag Table:
! Node: Top1043
! Node: Overview3663
! Node: Initial processing6461
! Ref: trigraphs8576
! Node: Tokenization12682
! Ref: Tokenization-Footnote-119728
! Node: The preprocessing language19839
! Node: Header Files22709
! Node: Include Syntax24585
! Node: Include Operation26084
! Node: Search Path27934
! Node: Once-Only Headers31008
! Node: Computed Includes32655
! Node: Wrapper Headers35791
! Node: System Headers38207
! Node: Macros40249
! Node: Object-like Macros41386
! Node: Function-like Macros44969
! Node: Macro Arguments46577
! Node: Stringification50719
! Node: Concatenation53917
! Node: Variadic Macros57027
! Node: Predefined Macros61806
! Node: Standard Predefined Macros62386
! Node: Common Predefined Macros68290
! Node: System-specific Predefined Macros76122
! Node: C++ Named Operators78131
! Node: Undefining and Redefining Macros79083
! Node: Directives Within Macro Arguments81177
! Node: Macro Pitfalls82717
! Node: Misnesting83240
! Node: Operator Precedence Problems84338
! Node: Swallowing the Semicolon86190
! Node: Duplication of Side Effects88199
! Node: Self-Referential Macros90368
! Node: Argument Prescan92774
! Node: Newlines in Arguments96514
! Node: Conditionals97456
! Node: Conditional Uses99282
! Node: Conditional Syntax100632
! Node: Ifdef100944
! Node: If104103
! Node: Defined106513
! Node: Else107784
! Node: Elif108342
! Node: Deleted Code109619
! Node: Diagnostics110858
! Node: Line Control112471
! Node: Pragmas116271
! Node: Other Directives120537
! Node: Preprocessor Output121726
! Node: Traditional Mode124923
! Node: Traditional lexical analysis125975
! Node: Traditional macros128468
! Node: Traditional miscellany132259
! Node: Traditional warnings133246
! Node: Implementation Details135433
! Node: Implementation-defined behavior136048
! Node: Implementation limits138719
! Node: Obsolete Features141407
! Node: Assertions141852
! Node: Obsolete once-only headers144379
! Node: Differences from previous versions146100
! Node: Invocation150169
! Ref: -MF158763
! Node: Environment Variables171424
! Node: GNU Free Documentation License174374
! Node: Index of Directives196801
! Node: Option Index198181
! Node: Concept Index201932
End Tag Table
--- 4927,5001 ----
Tag Table:
! Node: Top1022
! Node: Overview3645
! Node: Initial processing6446
! Ref: trigraphs8564
! Node: Tokenization12670
! Ref: Tokenization-Footnote-119719
! Node: The preprocessing language19830
! Node: Header Files22703
! Node: Include Syntax24581
! Node: Include Operation26083
! Node: Search Path27936
! Node: Once-Only Headers31013
! Node: Computed Includes32663
! Node: Wrapper Headers35802
! Node: System Headers38221
! Node: Macros40266
! Node: Object-like Macros41404
! Node: Function-like Macros44990
! Node: Macro Arguments46600
! Node: Stringification50745
! Node: Concatenation53946
! Node: Variadic Macros57060
! Node: Predefined Macros61842
! Node: Standard Predefined Macros62425
! Node: Common Predefined Macros68332
! Node: System-specific Predefined Macros76167
! Node: C++ Named Operators78179
! Node: Undefining and Redefining Macros79134
! Node: Directives Within Macro Arguments81231
! Node: Macro Pitfalls82774
! Node: Misnesting83300
! Node: Operator Precedence Problems84401
! Node: Swallowing the Semicolon86256
! Node: Duplication of Side Effects88268
! Node: Self-Referential Macros90440
! Node: Argument Prescan92850
! Node: Newlines in Arguments96593
! Node: Conditionals97538
! Node: Conditional Uses99367
! Node: Conditional Syntax100720
! Node: Ifdef101035
! Node: If104197
! Node: Defined106610
! Node: Else107883
! Node: Elif108444
! Node: Deleted Code109724
! Node: Diagnostics110966
! Node: Line Control112583
! Node: Pragmas116386
! Node: Other Directives120655
! Node: Preprocessor Output121847
! Node: Traditional Mode125047
! Node: Traditional lexical analysis126102
! Node: Traditional macros128598
! Node: Traditional miscellany132392
! Node: Traditional warnings133382
! Node: Implementation Details135572
! Node: Implementation-defined behavior136190
! Node: Implementation limits138864
! Node: Obsolete Features141555
! Node: Assertions142002
! Node: Obsolete once-only headers144532
! Node: Differences from previous versions146256
! Node: Invocation150328
! Ref: -MF158924
! Node: Environment Variables171585
! Node: GNU Free Documentation License174538
! Node: Index of Directives196968
! Node: Option Index198348
! Node: Concept Index202099
End Tag Table
diff -Nrc3pad gcc-3.3.4/gcc/doc/cppinternals.info gcc-3.3.5/gcc/doc/cppinternals.info
*** gcc-3.3.4/gcc/doc/cppinternals.info 2004-05-31 22:43:10.000000000 +0000
--- gcc-3.3.5/gcc/doc/cppinternals.info 2004-09-30 17:38:13.000000000 +0000
***************
*** 1,5 ****
! Ceci est le fichier Info doc/cppinternals.info, produit par Makeinfo
! version 4.6 à partir doc/cppinternals.texi.
INFO-DIR-SECTION Programming
START-INFO-DIR-ENTRY
--- 1,5 ----
! This is doc/cppinternals.info, produced by makeinfo version 4.5 from
! doc/cppinternals.texi.
INFO-DIR-SECTION Programming
START-INFO-DIR-ENTRY
*************** File: cppinternals.info, Node: Top, Ne
*** 31,38 ****
Cpplib--the GNU C Preprocessor
******************************
! The GNU C preprocessor in GCC 3.x has been completely rewritten. It is
! now 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 its exposed interface
--- 31,38 ----
Cpplib--the GNU C Preprocessor
******************************
! The GNU C preprocessor in GCC 3.x has been completely rewritten. It
! is now 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 its exposed interface
*************** File: cppinternals.info, Node: Conventi
*** 68,74 ****
Conventions
***********
! cpplib has two interfaces--one is exposed internally only, and the
other is for both internal and external use.
The convention is that functions and types that are exposed to
--- 68,74 ----
Conventions
***********
! cpplib has two interfaces--one is exposed internally only, and the
other is for both internal and external use.
The convention is that functions and types that are exposed to
*************** The Lexer
*** 94,100 ****
Overview
========
! The lexer is contained in the file `cpplex.c'. 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
--- 94,100 ----
Overview
========
! The lexer is contained in the file `cpplex.c'. 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
*************** generating diagnostics, and for emitting
*** 113,122 ****
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 convert any such files to UTF-8
before processing them. This complexity is therefore unnecessary and
will be removed, so I'll not discuss it further here.
--- 113,122 ----
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 convert any such files to UTF-8
before processing them. This complexity is therefore unnecessary and
will be removed, so I'll not discuss it further here.
*************** program calls cpp_destroy, probably at t
*** 277,283 ****
Lexing a line
=============
! When the preprocessor was changed to return pointers to tokens, one
feature I wanted was some sort of guarantee regarding how long a
returned pointer remains valid. This is important to the stand-alone
preprocessor, the future direction of the C family front ends, and even
--- 277,283 ----
Lexing a line
=============
! When the preprocessor was changed to return pointers to tokens, one
feature I wanted was some sort of guarantee regarding how long a
returned pointer remains valid. This is important to the stand-alone
preprocessor, the future direction of the C family front ends, and even
*************** File: cppinternals.info, Node: Hash Nod
*** 365,376 ****
Hash Nodes
**********
! 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
--- 365,376 ----
Hash Nodes
**********
! 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
*************** File: cppinternals.info, Node: Macro Ex
*** 426,434 ****
Macro Expansion Algorithm
*************************
! Macro expansion is a tricky operation, fraught with nasty corner cases
! and situations that render what you thought was a nifty way to optimize
! the preprocessor's expansion algorithm wrong in quite subtle ways.
I strongly recommend you have a good grasp of how the C and C++
standards require macros to be expanded before diving into this
--- 426,435 ----
Macro Expansion Algorithm
*************************
! Macro expansion is a tricky operation, fraught with nasty corner
! cases and situations that render what you thought was a nifty way to
! optimize the preprocessor's expansion algorithm wrong in quite subtle
! ways.
I strongly recommend you have a good grasp of how the C and C++
standards require macros to be expanded before diving into this
*************** pasting are supposed to work, damage to
*** 439,446 ****
Internal representation of macros
=================================
! The preprocessor stores macro expansions in tokenized form. This saves
! repeated lexing passes during expansion, at the cost of a small
increase in memory consumption on average. The tokens are stored
contiguously in memory, so a pointer to the first one and a token count
is all you need to get the replacement list of a macro.
--- 440,447 ----
Internal representation of macros
=================================
! The preprocessor stores macro expansions in tokenized form. This
! saves repeated lexing passes during expansion, at the cost of a small
increase in memory consumption on average. The tokens are stored
contiguously in memory, so a pointer to the first one and a token count
is all you need to get the replacement list of a macro.
*************** changed.
*** 460,468 ****
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,
--- 461,469 ----
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,
*************** being expanded.
*** 505,511 ****
Scanning the replacement list for macros to expand
==================================================
! The C standard states that, after any parameters have been replaced
with their possibly-expanded arguments, the replacement list is scanned
for nested macros. Further, any identifiers in the replacement list
that are not expanded during this scan are never again eligible for
--- 506,512 ----
Scanning the replacement list for macros to expand
==================================================
! The C standard states that, after any parameters have been replaced
with their possibly-expanded arguments, the replacement list is scanned
for nested macros. Further, any identifiers in the replacement list
that are not expanded during this scan are never again eligible for
*************** it a second time.
*** 555,561 ****
Looking for a function-like macro's opening parenthesis
=======================================================
! Function-like macros only expand when immediately followed by a
parenthesis. To do this cpplib needs to temporarily disable macros and
read the next token. Unfortunately, because of spacing issues (*note
Token Spacing::), there can be fake padding tokens in-between, and if
--- 556,562 ----
Looking for a function-like macro's opening parenthesis
=======================================================
! Function-like macros only expand when immediately followed by a
parenthesis. To do this cpplib needs to temporarily disable macros and
read the next token. Unfortunately, because of spacing issues (*note
Token Spacing::), there can be fake padding tokens in-between, and if
*************** context just containing the padding info
*** 575,581 ****
Marking tokens ineligible for future expansion
==============================================
! 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.
--- 576,582 ----
Marking tokens ineligible for future expansion
==============================================
! 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.
*************** File: cppinternals.info, Node: Token Sp
*** 598,604 ****
Token Spacing
*************
! First, let's look at an issue that only concerns the stand-alone
preprocessor: we want to guarantee that re-reading its preprocessed
output results in an identical token stream. Without taking special
measures, this might not be the case because of macro substitution.
--- 599,605 ----
Token Spacing
*************
! First, let's look at an issue that only concerns the stand-alone
preprocessor: we want to guarantee that re-reading its preprocessed
output results in an identical token stream. Without taking special
measures, this might not be the case because of macro substitution.
*************** Line numbering
*** 729,736 ****
Just which line number anyway?
==============================
! 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.
--- 730,737 ----
Just which line number anyway?
==============================
! 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.
*************** produce correct output.
*** 785,794 ****
Representation of line numbers
==============================
! As mentioned above, cpplib stores with each token the line number that
! it was lexed on. In fact, this number is not the number of the line in
! the source file, but instead bears more resemblance to the number of the
! line in the translation unit.
The preprocessor maintains a monotonic increasing line count, which
is incremented at every new line character (and also at the end of any
--- 786,795 ----
Representation of line numbers
==============================
! As mentioned above, cpplib stores with each token the line number
! that it was lexed on. In fact, this number is not the number of the
! line in the source file, but instead bears more resemblance to the
! number of the line in the translation unit.
The preprocessor maintains a monotonic increasing line count, which
is incremented at every new line character (and also at the end of any
*************** File: cppinternals.info, Node: Guard Ma
*** 816,822 ****
The Multiple-Include Optimization
*********************************
! Header files are often of the form
#ifndef FOO
#define FOO
--- 817,823 ----
The Multiple-Include Optimization
*********************************
! Header files are often of the form
#ifndef FOO
#define FOO
*************** File: cppinternals.info, Node: Files,
*** 922,931 ****
File Handling
*************
! Fairly obviously, the file handling code of cpplib resides in the file
! `cppfiles.c'. 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
--- 923,932 ----
File Handling
*************
! Fairly obviously, the file handling code of cpplib resides in the
! file `cppfiles.c'. 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
*************** Index
*** 1017,1033 ****
Tag Table:
! Node: Top931
! Node: Conventions2597
! Node: Lexer3538
! Ref: Invalid identifiers11455
! Ref: Lexing a line13404
! Node: Hash Nodes18174
! Node: Macro Expansion21053
! Node: Token Spacing30000
! Node: Line Numbering35879
! Node: Guard Macros39964
! Node: Files44759
! Node: Index48220
End Tag Table
--- 1018,1034 ----
Tag Table:
! Node: Top910
! Node: Conventions2579
! Node: Lexer3523
! Ref: Invalid identifiers11446
! Ref: Lexing a line13395
! Node: Hash Nodes18168
! Node: Macro Expansion21050
! Node: Token Spacing30015
! Node: Line Numbering35897
! Node: Guard Macros39988
! Node: Files44786
! Node: Index48250
End Tag Table
diff -Nrc3pad gcc-3.3.4/gcc/doc/fsf-funding.7 gcc-3.3.5/gcc/doc/fsf-funding.7
*** gcc-3.3.4/gcc/doc/fsf-funding.7 2004-05-31 22:43:19.000000000 +0000
--- gcc-3.3.5/gcc/doc/fsf-funding.7 2004-09-30 17:38:16.000000000 +0000
***************
*** 1,8 ****
! .\" Automatically generated by Pod::Man version 1.15
! .\" Mon May 31 22:43:19 2004
.\"
.\" Standard preamble:
! .\" ======================================================================
.de Sh \" Subsection heading
.br
.if t .Sp
--- 1,7 ----
! .\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.13
.\"
.\" Standard preamble:
! .\" ========================================================================
.de Sh \" Subsection heading
.br
.if t .Sp
***************
*** 15,26 ****
.if t .sp .5v
.if n .sp
..
- .de Ip \" List item
- .br
- .ie \\n(.$>=3 .ne \\$3
- .el .ne 3
- .IP "\\$1" \\$2
- ..
.de Vb \" Begin verbatim text
.ft CW
.nf
--- 14,19 ----
***************
*** 28,42 ****
..
.de Ve \" End verbatim text
.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. | will give a
! .\" real vertical bar. \*(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-|\(bv\*(Tr
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
--- 21,34 ----
..
.de Ve \" End verbatim text
.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. | will give a
! .\" real vertical bar. \*(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-|\(bv\*(Tr
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
***************
*** 56,65 ****
. ds R" ''
'br\}
.\"
! .\" If the F register is turned on, we'll generate index entries on stderr
! .\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and
! .\" index entries marked with X<> in POD. Of course, you'll have to process
! .\" the output yourself in some meaningful fashion.
.if \nF \{\
. de IX
. tm Index:\\$1\t\\n%\t"\\$2"
--- 48,57 ----
. ds R" ''
'br\}
.\"
! .\" If the F register is turned on, we'll generate index entries on stderr for
! .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
! .\" entries marked with X<> in POD. Of course, you'll have to process the
! .\" output yourself in some meaningful fashion.
.if \nF \{\
. de IX
. tm Index:\\$1\t\\n%\t"\\$2"
***************
*** 68,81 ****
. rr F
.\}
.\"
! .\" For nroff, turn off justification. Always turn off hyphenation; it
! .\" makes way too many mistakes in technical documents.
.hy 0
.if n .na
.\"
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
.\" Fear. Run. Save yourself. No user-serviceable parts.
- .bd B 3
. \" fudge factors for nroff and troff
.if n \{\
. ds #H 0
--- 60,72 ----
. rr F
.\}
.\"
! .\" For nroff, turn off justification. Always turn off hyphenation; it makes
! .\" way too many mistakes in technical documents.
.hy 0
.if n .na
.\"
.\" 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
***************
*** 135,147 ****
. ds Ae AE
.\}
.rm #[ #] #H #V #F C
! .\" ======================================================================
.\"
! .IX Title "fsf-funding 7"
! .TH fsf-funding 7 "gcc-3.3.4" "2004-05-31" "GNU"
! .UC
.SH "NAME"
! fsf-funding \- Funding Free Software
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
.Sh "Funding Free Software"
--- 126,137 ----
. ds Ae AE
.\}
.rm #[ #] #H #V #F C
! .\" ========================================================================
.\"
! .IX Title "FSF-FUNDING 7"
! .TH FSF-FUNDING 7 "2004-09-30" "gcc-3.3.5" "GNU"
.SH "NAME"
! fsf\-funding \- Funding Free Software
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
.Sh "Funding Free Software"
diff -Nrc3pad gcc-3.3.4/gcc/doc/gcc.1 gcc-3.3.5/gcc/doc/gcc.1
*** gcc-3.3.4/gcc/doc/gcc.1 2004-05-31 22:43:18.000000000 +0000
--- gcc-3.3.5/gcc/doc/gcc.1 2004-09-30 17:38:16.000000000 +0000
***************
*** 1,8 ****
! .\" Automatically generated by Pod::Man version 1.15
! .\" Mon May 31 22:43:12 2004
.\"
.\" Standard preamble:
! .\" ======================================================================
.de Sh \" Subsection heading
.br
.if t .Sp
--- 1,7 ----
! .\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.13
.\"
.\" Standard preamble:
! .\" ========================================================================
.de Sh \" Subsection heading
.br
.if t .Sp
***************
*** 15,26 ****
.if t .sp .5v
.if n .sp
..
- .de Ip \" List item
- .br
- .ie \\n(.$>=3 .ne \\$3
- .el .ne 3
- .IP "\\$1" \\$2
- ..
.de Vb \" Begin verbatim text
.ft CW
.nf
--- 14,19 ----
***************
*** 28,42 ****
..
.de Ve \" End verbatim text
.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. | will give a
! .\" real vertical bar. \*(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-|\(bv\*(Tr
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
--- 21,34 ----
..
.de Ve \" End verbatim text
.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. | will give a
! .\" real vertical bar. \*(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-|\(bv\*(Tr
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
***************
*** 56,65 ****
. ds R" ''
'br\}
.\"
! .\" If the F register is turned on, we'll generate index entries on stderr
! .\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and
! .\" index entries marked with X<> in POD. Of course, you'll have to process
! .\" the output yourself in some meaningful fashion.
.if \nF \{\
. de IX
. tm Index:\\$1\t\\n%\t"\\$2"
--- 48,57 ----
. ds R" ''
'br\}
.\"
! .\" If the F register is turned on, we'll generate index entries on stderr for
! .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
! .\" entries marked with X<> in POD. Of course, you'll have to process the
! .\" output yourself in some meaningful fashion.
.if \nF \{\
. de IX
. tm Index:\\$1\t\\n%\t"\\$2"
***************
*** 68,81 ****
. rr F
.\}
.\"
! .\" For nroff, turn off justification. Always turn off hyphenation; it
! .\" makes way too many mistakes in technical documents.
.hy 0
.if n .na
.\"
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
.\" Fear. Run. Save yourself. No user-serviceable parts.
- .bd B 3
. \" fudge factors for nroff and troff
.if n \{\
. ds #H 0
--- 60,72 ----
. rr F
.\}
.\"
! .\" For nroff, turn off justification. Always turn off hyphenation; it makes
! .\" way too many mistakes in technical documents.
.hy 0
.if n .na
.\"
.\" 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
***************
*** 135,147 ****
. ds Ae AE
.\}
.rm #[ #] #H #V #F C
! .\" ======================================================================
.\"
.IX Title "GCC 1"
! .TH GCC 1 "gcc-3.3.4" "2004-05-31" "GNU"
! .UC
.SH "NAME"
! gcc \- \s-1GNU\s0 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]
--- 126,137 ----
. ds Ae AE
.\}
.rm #[ #] #H #V #F C
! .\" ========================================================================
.\"
.IX Title "GCC 1"
! .TH GCC 1 "2004-09-30" "gcc-3.3.5" "GNU"
.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]
*************** of the same kind; for example, if you sp
*** 183,192 ****
the directories are searched in the order specified.
.PP
Many options have long names starting with \fB\-f\fR or with
! \&\fB\-W\fR\-\-\-for example, \fB\-fforce-mem\fR,
! \&\fB\-fstrength-reduce\fR, \fB\-Wformat\fR and so on. Most of
these have both 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"
--- 173,182 ----
the directories are searched in the order specified.
.PP
Many options have long names starting with \fB\-f\fR or with
! \&\fB\-W\fR\-\-\-for example, \fB\-fforce\-mem\fR,
! \&\fB\-fstrength\-reduce\fR, \fB\-Wformat\fR and so on. Most of
these have both 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"
*************** only one of these two forms, whichever o
*** 194,327 ****
.IX Subsection "Option Summary"
Here is a summary of all the options, grouped by type. Explanations are
in the following sections.
! .Ip "\fIOverall Options\fR" 4
.IX Item "Overall Options"
! \&\fB\-c \-S \-E \-o\fR \fIfile\fR \fB\-pipe \-pass-exit-codes
! \&\-x\fR \fIlanguage\fR \fB\-v \-### \-\-help \-\-target-help \-\-version\fR
! .Ip "\fIC Language Options\fR" 4
.IX Item "C Language Options"
! \&\fB\-ansi \-std=\fR\fIstandard\fR \fB\-aux-info\fR \fIfilename\fR
! \&\fB\-fno-asm \-fno-builtin \-fno-builtin-\fR\fIfunction\fR
! \&\fB\-fhosted \-ffreestanding \-fms-extensions
! \&\-trigraphs \-no-integrated-cpp \-traditional \-traditional-cpp
! \&\-fallow-single-precision \-fcond-mismatch
! \&\-fsigned-bitfields \-fsigned-char
! \&\-funsigned-bitfields \-funsigned-char
! \&\-fwritable-strings\fR
! .Ip "\fI\*(C+ Language Options\fR" 4
.IX Item " Language Options"
! \&\fB\-fabi-version=\fR\fIn\fR \fB\-fno-access-control \-fcheck-new
! \&\-fconserve-space \-fno-const-strings \-fdollars-in-identifiers
! \&\-fno-elide-constructors
! \&\-fno-enforce-eh-specs \-fexternal-templates
! \&\-falt-external-templates
! \&\-ffor-scope \-fno-for-scope \-fno-gnu-keywords
! \&\-fno-implicit-templates
! \&\-fno-implicit-inline-templates
! \&\-fno-implement-inlines \-fms-extensions
! \&\-fno-nonansi-builtins \-fno-operator-names
! \&\-fno-optional-diags \-fpermissive
! \&\-frepo \-fno-rtti \-fstats \-ftemplate-depth-\fR\fIn\fR
! \&\fB\-fuse-cxa-atexit \-fvtable-gc \-fno-weak \-nostdinc++
! \&\-fno-default-inline \-Wabi \-Wctor-dtor-privacy
! \&\-Wnon-virtual-dtor \-Wreorder
! \&\-Weffc++ \-Wno-deprecated
! \&\-Wno-non-template-friend \-Wold-style-cast
! \&\-Woverloaded-virtual \-Wno-pmf-conversions
! \&\-Wsign-promo \-Wsynth\fR
! .Ip "\fIObjective-C Language Options\fR" 4
.IX Item "Objective-C Language Options"
! \&\fB\-fconstant-string-class=\fR\fIclass-name\fR
! \&\fB\-fgnu-runtime \-fnext-runtime \-gen-decls
! \&\-Wno-protocol \-Wselector \-Wundeclared-selector\fR
! .Ip "\fILanguage Independent Options\fR" 4
.IX Item "Language Independent Options"
! \&\fB\-fmessage-length=\fR\fIn\fR
! \&\fB\-fdiagnostics-show-location=\fR[\fBonce\fR|\fBevery-line\fR]
! .Ip "\fIWarning Options\fR" 4
.IX Item "Warning Options"
! \&\fB\-fsyntax-only \-pedantic \-pedantic-errors
! \&\-w \-W \-Wall \-Waggregate-return
! \&\-Wcast-align \-Wcast-qual \-Wchar-subscripts \-Wcomment
! \&\-Wconversion \-Wno-deprecated-declarations
! \&\-Wdisabled-optimization \-Wno-div-by-zero \-Werror
! \&\-Wfloat-equal \-Wformat \-Wformat=2
! \&\-Wformat-nonliteral \-Wformat-security
! \&\-Wimplicit \-Wimplicit-int
! \&\-Wimplicit-function-declaration
! \&\-Werror-implicit-function-declaration
! \&\-Wimport \-Winline \-Wno-endif-labels
! \&\-Wlarger-than-\fR\fIlen\fR \fB\-Wlong-long
! \&\-Wmain \-Wmissing-braces
! \&\-Wmissing-format-attribute \-Wmissing-noreturn
! \&\-Wno-multichar \-Wno-format-extra-args \-Wno-format-y2k
! \&\-Wno-import \-Wnonnull \-Wpacked \-Wpadded
! \&\-Wparentheses \-Wpointer-arith \-Wredundant-decls
! \&\-Wreturn-type \-Wsequence-point \-Wshadow
! \&\-Wsign-compare \-Wstrict-aliasing
! \&\-Wswitch \-Wswitch-default \-Wswitch-enum
! \&\-Wsystem-headers \-Wtrigraphs \-Wundef \-Wuninitialized
! \&\-Wunknown-pragmas \-Wunreachable-code
! \&\-Wunused \-Wunused-function \-Wunused-label \-Wunused-parameter
! \&\-Wunused-value \-Wunused-variable \-Wwrite-strings\fR
! .Ip "\fIC-only Warning Options\fR" 4
.IX Item "C-only Warning Options"
! \&\fB\-Wbad-function-cast \-Wmissing-declarations
! \&\-Wmissing-prototypes \-Wnested-externs
! \&\-Wstrict-prototypes \-Wtraditional\fR
! .Ip "\fIDebugging Options\fR" 4
.IX Item "Debugging Options"
\&\fB\-d\fR\fIletters\fR \fB\-dumpspecs \-dumpmachine \-dumpversion
! \&\-fdump-unnumbered \-fdump-translation-unit\fR[\fB-\fR\fIn\fR]
! \&\fB\-fdump-class-hierarchy\fR[\fB-\fR\fIn\fR]
! \&\fB\-fdump-tree-original\fR[\fB-\fR\fIn\fR]
! \&\fB\-fdump-tree-optimized\fR[\fB-\fR\fIn\fR]
! \&\fB\-fdump-tree-inlined\fR[\fB-\fR\fIn\fR]
! \&\fB\-feliminate-dwarf2\-dups \-fmem-report
! \&\-fprofile-arcs \-frandom-seed=\fR\fIn\fR
! \&\fB\-fsched-verbose=\fR\fIn\fR \fB\-ftest-coverage \-ftime-report
! \&\-g \-g\fR\fIlevel\fR \fB\-gcoff \-gdwarf \-gdwarf-1 \-gdwarf-1+ \-gdwarf-2
\&\-ggdb \-gstabs \-gstabs+ \-gvms \-gxcoff \-gxcoff+
! \&\-p \-pg \-print-file-name=\fR\fIlibrary\fR \fB\-print-libgcc-file-name
! \&\-print-multi-directory \-print-multi-lib
! \&\-print-prog-name=\fR\fIprogram\fR \fB\-print-search-dirs \-Q
! \&\-save-temps \-time\fR
! .Ip "\fIOptimization Options\fR" 4
.IX Item "Optimization Options"
! \&\fB\-falign-functions=\fR\fIn\fR \fB\-falign-jumps=\fR\fIn\fR
! \&\fB\-falign-labels=\fR\fIn\fR \fB\-falign-loops=\fR\fIn\fR
! \&\fB\-fbranch-probabilities \-fcaller-saves \-fcprop-registers
! \&\-fcse-follow-jumps \-fcse-skip-blocks \-fdata-sections
! \&\-fdelayed-branch \-fdelete-null-pointer-checks
! \&\-fexpensive-optimizations \-ffast-math \-ffloat-store
! \&\-fforce-addr \-fforce-mem \-ffunction-sections
! \&\-fgcse \-fgcse-lm \-fgcse-sm \-floop-optimize \-fcrossjumping
! \&\-fif-conversion \-fif-conversion2
! \&\-finline-functions \-finline-limit=\fR\fIn\fR \fB\-fkeep-inline-functions
! \&\-fkeep-static-consts \-fmerge-constants \-fmerge-all-constants
! \&\-fmove-all-movables \-fnew-ra \-fno-branch-count-reg
! \&\-fno-default-inline \-fno-defer-pop
! \&\-fno-function-cse \-fno-guess-branch-probability
! \&\-fno-inline \-fno-math-errno \-fno-peephole \-fno-peephole2
! \&\-funsafe-math-optimizations \-ffinite-math-only
! \&\-fno-trapping-math \-fno-zero-initialized-in-bss
! \&\-fomit-frame-pointer \-foptimize-register-move
! \&\-foptimize-sibling-calls \-fprefetch-loop-arrays
! \&\-freduce-all-givs \-fregmove \-frename-registers
! \&\-freorder-blocks \-freorder-functions
! \&\-frerun-cse-after-loop \-frerun-loop-opt
! \&\-fschedule-insns \-fschedule-insns2
! \&\-fno-sched-interblock \-fno-sched-spec \-fsched-spec-load
! \&\-fsched-spec-load-dangerous \-fsignaling-nans
! \&\-fsingle-precision-constant \-fssa \-fssa-ccp \-fssa-dce
! \&\-fstrength-reduce \-fstrict-aliasing \-ftracer \-fthread-jumps
! \&\-funroll-all-loops \-funroll-loops
\&\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR
\&\fB\-O \-O0 \-O1 \-O2 \-O3 \-Os\fR
! .Ip "\fIPreprocessor Options\fR" 4
.IX Item "Preprocessor Options"
\&\fB\-$ \-A\fR\fIquestion\fR\fB=\fR\fIanswer\fR
! \&\fB\-A-\fR\fIquestion\fR[\fB=\fR\fIanswer\fR]
\&\fB\-C \-dD \-dI \-dM \-dN
\&\-D\fR\fImacro\fR[\fB=\fR\fIdefn\fR] \fB\-E \-H
\&\-idirafter\fR \fIdir\fR
--- 184,317 ----
.IX Subsection "Option Summary"
Here is a summary of all the options, grouped by type. Explanations are
in the following sections.
! .IP "\fIOverall Options\fR" 4
.IX Item "Overall Options"
! \&\fB\-c \-S \-E \-o\fR \fIfile\fR \fB\-pipe \-pass\-exit\-codes
! \&\-x\fR \fIlanguage\fR \fB\-v \-### \-\-help \-\-target\-help \-\-version\fR
! .IP "\fIC Language Options\fR" 4
.IX Item "C Language Options"
! \&\fB\-ansi \-std=\fR\fIstandard\fR \fB\-aux\-info\fR \fIfilename\fR
! \&\fB\-fno\-asm \-fno\-builtin \-fno\-builtin\-\fR\fIfunction\fR
! \&\fB\-fhosted \-ffreestanding \-fms\-extensions
! \&\-trigraphs \-no\-integrated\-cpp \-traditional \-traditional\-cpp
! \&\-fallow\-single\-precision \-fcond\-mismatch
! \&\-fsigned\-bitfields \-fsigned\-char
! \&\-funsigned\-bitfields \-funsigned\-char
! \&\-fwritable\-strings\fR
! .IP "\fI\*(C+ Language Options\fR" 4
.IX Item " Language Options"
! \&\fB\-fabi\-version=\fR\fIn\fR \fB\-fno\-access\-control \-fcheck\-new
! \&\-fconserve\-space \-fno\-const\-strings \-fdollars\-in\-identifiers
! \&\-fno\-elide\-constructors
! \&\-fno\-enforce\-eh\-specs \-fexternal\-templates
! \&\-falt\-external\-templates
! \&\-ffor\-scope \-fno\-for\-scope \-fno\-gnu\-keywords
! \&\-fno\-implicit\-templates
! \&\-fno\-implicit\-inline\-templates
! \&\-fno\-implement\-inlines \-fms\-extensions
! \&\-fno\-nonansi\-builtins \-fno\-operator\-names
! \&\-fno\-optional\-diags \-fpermissive
! \&\-frepo \-fno\-rtti \-fstats \-ftemplate\-depth\-\fR\fIn\fR
! \&\fB\-fuse\-cxa\-atexit \-fvtable\-gc \-fno\-weak \-nostdinc++
! \&\-fno\-default\-inline \-Wabi \-Wctor\-dtor\-privacy
! \&\-Wnon\-virtual\-dtor \-Wreorder
! \&\-Weffc++ \-Wno\-deprecated
! \&\-Wno\-non\-template\-friend \-Wold\-style\-cast
! \&\-Woverloaded\-virtual \-Wno\-pmf\-conversions
! \&\-Wsign\-promo \-Wsynth\fR
! .IP "\fIObjective-C Language Options\fR" 4
.IX Item "Objective-C Language Options"
! \&\fB\-fconstant\-string\-class=\fR\fIclass-name\fR
! \&\fB\-fgnu\-runtime \-fnext\-runtime \-gen\-decls
! \&\-Wno\-protocol \-Wselector \-Wundeclared\-selector\fR
! .IP "\fILanguage Independent Options\fR" 4
.IX Item "Language Independent Options"
! \&\fB\-fmessage\-length=\fR\fIn\fR
! \&\fB\-fdiagnostics\-show\-location=\fR[\fBonce\fR|\fBevery-line\fR]
! .IP "\fIWarning Options\fR" 4
.IX Item "Warning Options"
! \&\fB\-fsyntax\-only \-pedantic \-pedantic\-errors
! \&\-w \-W \-Wall \-Waggregate\-return
! \&\-Wcast\-align \-Wcast\-qual \-Wchar\-subscripts \-Wcomment
! \&\-Wconversion \-Wno\-deprecated\-declarations
! \&\-Wdisabled\-optimization \-Wno\-div\-by\-zero \-Werror
! \&\-Wfloat\-equal \-Wformat \-Wformat=2
! \&\-Wformat\-nonliteral \-Wformat\-security
! \&\-Wimplicit \-Wimplicit\-int
! \&\-Wimplicit\-function\-declaration
! \&\-Werror\-implicit\-function\-declaration
! \&\-Wimport \-Winline \-Wno\-endif\-labels
! \&\-Wlarger\-than\-\fR\fIlen\fR \fB\-Wlong\-long
! \&\-Wmain \-Wmissing\-braces
! \&\-Wmissing\-format\-attribute \-Wmissing\-noreturn
! \&\-Wno\-multichar \-Wno\-format\-extra\-args \-Wno\-format\-y2k
! \&\-Wno\-import \-Wnonnull \-Wpacked \-Wpadded
! \&\-Wparentheses \-Wpointer\-arith \-Wredundant\-decls
! \&\-Wreturn\-type \-Wsequence\-point \-Wshadow
! \&\-Wsign\-compare \-Wstrict\-aliasing
! \&\-Wswitch \-Wswitch\-default \-Wswitch\-enum
! \&\-Wsystem\-headers \-Wtrigraphs \-Wundef \-Wuninitialized
! \&\-Wunknown\-pragmas \-Wunreachable\-code
! \&\-Wunused \-Wunused\-function \-Wunused\-label \-Wunused\-parameter
! \&\-Wunused\-value \-Wunused\-variable \-Wwrite\-strings\fR
! .IP "\fIC\-only Warning Options\fR" 4
.IX Item "C-only Warning Options"
! \&\fB\-Wbad\-function\-cast \-Wmissing\-declarations
! \&\-Wmissing\-prototypes \-Wnested\-externs
! \&\-Wstrict\-prototypes \-Wtraditional\fR
! .IP "\fIDebugging Options\fR" 4
.IX Item "Debugging Options"
\&\fB\-d\fR\fIletters\fR \fB\-dumpspecs \-dumpmachine \-dumpversion
! \&\-fdump\-unnumbered \-fdump\-translation\-unit\fR[\fB\-\fR\fIn\fR]
! \&\fB\-fdump\-class\-hierarchy\fR[\fB\-\fR\fIn\fR]
! \&\fB\-fdump\-tree\-original\fR[\fB\-\fR\fIn\fR]
! \&\fB\-fdump\-tree\-optimized\fR[\fB\-\fR\fIn\fR]
! \&\fB\-fdump\-tree\-inlined\fR[\fB\-\fR\fIn\fR]
! \&\fB\-feliminate\-dwarf2\-dups \-fmem\-report
! \&\-fprofile\-arcs \-frandom\-seed=\fR\fIn\fR
! \&\fB\-fsched\-verbose=\fR\fIn\fR \fB\-ftest\-coverage \-ftime\-report
! \&\-g \-g\fR\fIlevel\fR \fB\-gcoff \-gdwarf \-gdwarf\-1 \-gdwarf\-1+ \-gdwarf\-2
\&\-ggdb \-gstabs \-gstabs+ \-gvms \-gxcoff \-gxcoff+
! \&\-p \-pg \-print\-file\-name=\fR\fIlibrary\fR \fB\-print\-libgcc\-file\-name
! \&\-print\-multi\-directory \-print\-multi\-lib
! \&\-print\-prog\-name=\fR\fIprogram\fR \fB\-print\-search\-dirs \-Q
! \&\-save\-temps \-time\fR
! .IP "\fIOptimization Options\fR" 4
.IX Item "Optimization Options"
! \&\fB\-falign\-functions=\fR\fIn\fR \fB\-falign\-jumps=\fR\fIn\fR
! \&\fB\-falign\-labels=\fR\fIn\fR \fB\-falign\-loops=\fR\fIn\fR
! \&\fB\-fbranch\-probabilities \-fcaller\-saves \-fcprop\-registers
! \&\-fcse\-follow\-jumps \-fcse\-skip\-blocks \-fdata\-sections
! \&\-fdelayed\-branch \-fdelete\-null\-pointer\-checks
! \&\-fexpensive\-optimizations \-ffast\-math \-ffloat\-store
! \&\-fforce\-addr \-fforce\-mem \-ffunction\-sections
! \&\-fgcse \-fgcse\-lm \-fgcse\-sm \-floop\-optimize \-fcrossjumping
! \&\-fif\-conversion \-fif\-conversion2
! \&\-finline\-functions \-finline\-limit=\fR\fIn\fR \fB\-fkeep\-inline\-functions
! \&\-fkeep\-static\-consts \-fmerge\-constants \-fmerge\-all\-constants
! \&\-fmove\-all\-movables \-fnew\-ra \-fno\-branch\-count\-reg
! \&\-fno\-default\-inline \-fno\-defer\-pop
! \&\-fno\-function\-cse \-fno\-guess\-branch\-probability
! \&\-fno\-inline \-fno\-math\-errno \-fno\-peephole \-fno\-peephole2
! \&\-funsafe\-math\-optimizations \-ffinite\-math\-only
! \&\-fno\-trapping\-math \-fno\-zero\-initialized\-in\-bss
! \&\-fomit\-frame\-pointer \-foptimize\-register\-move
! \&\-foptimize\-sibling\-calls \-fprefetch\-loop\-arrays
! \&\-freduce\-all\-givs \-fregmove \-frename\-registers
! \&\-freorder\-blocks \-freorder\-functions
! \&\-frerun\-cse\-after\-loop \-frerun\-loop\-opt
! \&\-fschedule\-insns \-fschedule\-insns2
! \&\-fno\-sched\-interblock \-fno\-sched\-spec \-fsched\-spec\-load
! \&\-fsched\-spec\-load\-dangerous \-fsignaling\-nans
! \&\-fsingle\-precision\-constant \-fssa \-fssa\-ccp \-fssa\-dce
! \&\-fstrength\-reduce \-fstrict\-aliasing \-ftracer \-fthread\-jumps
! \&\-funroll\-all\-loops \-funroll\-loops
\&\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR
\&\fB\-O \-O0 \-O1 \-O2 \-O3 \-Os\fR
! .IP "\fIPreprocessor Options\fR" 4
.IX Item "Preprocessor Options"
\&\fB\-$ \-A\fR\fIquestion\fR\fB=\fR\fIanswer\fR
! \&\fB\-A\-\fR\fIquestion\fR[\fB=\fR\fIanswer\fR]
\&\fB\-C \-dD \-dI \-dM \-dN
\&\-D\fR\fImacro\fR[\fB=\fR\fIdefn\fR] \fB\-E \-H
\&\-idirafter\fR \fIdir\fR
*************** in the following sections.
*** 330,363 ****
\&\fB\-iwithprefixbefore\fR \fIdir\fR \fB\-isystem\fR \fIdir\fR
\&\fB\-M \-MM \-MF \-MG \-MP \-MQ \-MT \-nostdinc \-P \-remap
\&\-trigraphs \-undef \-U\fR\fImacro\fR \fB\-Wp,\fR\fIoption\fR
! .Ip "\fIAssembler Option\fR" 4
.IX Item "Assembler Option"
\&\fB\-Wa,\fR\fIoption\fR
! .Ip "\fILinker Options\fR" 4
.IX Item "Linker Options"
\&\fIobject-file-name\fR \fB\-l\fR\fIlibrary\fR
\&\fB\-nostartfiles \-nodefaultlibs \-nostdlib
! \&\-s \-static \-static-libgcc \-shared \-shared-libgcc \-symbolic
\&\-Wl,\fR\fIoption\fR \fB\-Xlinker\fR \fIoption\fR
\&\fB\-u\fR \fIsymbol\fR
! .Ip "\fIDirectory Options\fR" 4
.IX Item "Directory Options"
! \&\fB\-B\fR\fIprefix\fR \fB\-I\fR\fIdir\fR \fB\-I- \-L\fR\fIdir\fR \fB\-specs=\fR\fIfile\fR
! .Ip "\fITarget Options\fR" 4
.IX Item "Target Options"
\&\fB\-V\fR \fIversion\fR \fB\-b\fR \fImachine\fR
! .Ip "\fIMachine Dependent Options\fR" 4
.IX Item "Machine Dependent Options"
\&\fIM680x0 Options\fR
\&\fB\-m68000 \-m68020 \-m68020\-40 \-m68020\-60 \-m68030 \-m68040
\&\-m68060 \-mcpu32 \-m5200 \-m68881 \-mbitfield \-mc68000 \-mc68020
! \&\-mfpa \-mnobitfield \-mrtd \-mshort \-msoft-float \-mpcrel
! \&\-malign-int \-mstrict-align\fR
.Sp
\&\fIM68hc1x Options\fR
\&\fB\-m6811 \-m6812 \-m68hc11 \-m68hc12 \-m68hcs12
! \&\-mauto-incdec \-minmax \-mlong-calls \-mshort
! \&\-msoft-reg-count=\fR\fIcount\fR
.Sp
\&\fI\s-1VAX\s0 Options\fR
\&\fB\-mg \-mgnu \-munix\fR
--- 320,353 ----
\&\fB\-iwithprefixbefore\fR \fIdir\fR \fB\-isystem\fR \fIdir\fR
\&\fB\-M \-MM \-MF \-MG \-MP \-MQ \-MT \-nostdinc \-P \-remap
\&\-trigraphs \-undef \-U\fR\fImacro\fR \fB\-Wp,\fR\fIoption\fR
! .IP "\fIAssembler Option\fR" 4
.IX Item "Assembler Option"
\&\fB\-Wa,\fR\fIoption\fR
! .IP "\fILinker Options\fR" 4
.IX Item "Linker Options"
\&\fIobject-file-name\fR \fB\-l\fR\fIlibrary\fR
\&\fB\-nostartfiles \-nodefaultlibs \-nostdlib
! \&\-s \-static \-static\-libgcc \-shared \-shared\-libgcc \-symbolic
\&\-Wl,\fR\fIoption\fR \fB\-Xlinker\fR \fIoption\fR
\&\fB\-u\fR \fIsymbol\fR
! .IP "\fIDirectory Options\fR" 4
.IX Item "Directory Options"
! \&\fB\-B\fR\fIprefix\fR \fB\-I\fR\fIdir\fR \fB\-I\- \-L\fR\fIdir\fR \fB\-specs=\fR\fIfile\fR
! .IP "\fITarget Options\fR" 4
.IX Item "Target Options"
\&\fB\-V\fR \fIversion\fR \fB\-b\fR \fImachine\fR
! .IP "\fIMachine Dependent Options\fR" 4
.IX Item "Machine Dependent Options"
\&\fIM680x0 Options\fR
\&\fB\-m68000 \-m68020 \-m68020\-40 \-m68020\-60 \-m68030 \-m68040
\&\-m68060 \-mcpu32 \-m5200 \-m68881 \-mbitfield \-mc68000 \-mc68020
! \&\-mfpa \-mnobitfield \-mrtd \-mshort \-msoft\-float \-mpcrel
! \&\-malign\-int \-mstrict\-align\fR
.Sp
\&\fIM68hc1x Options\fR
\&\fB\-m6811 \-m6812 \-m68hc11 \-m68hc12 \-m68hcs12
! \&\-mauto\-incdec \-minmax \-mlong\-calls \-mshort
! \&\-msoft\-reg\-count=\fR\fIcount\fR
.Sp
\&\fI\s-1VAX\s0 Options\fR
\&\fB\-mg \-mgnu \-munix\fR
*************** in the following sections.
*** 367,451 ****
\&\fB\-mtune=\fR\fIcpu-type\fR
\&\fB\-mcmodel=\fR\fIcode-model\fR
\&\fB\-m32 \-m64
! \&\-mapp-regs \-mbroken-saverestore \-mcypress
! \&\-mfaster-structs \-mflat
! \&\-mfpu \-mhard-float \-mhard-quad-float
! \&\-mimpure-text \-mlittle-endian \-mlive-g0 \-mno-app-regs
! \&\-mno-faster-structs \-mno-flat \-mno-fpu
! \&\-mno-impure-text \-mno-stack-bias \-mno-unaligned-doubles
! \&\-msoft-float \-msoft-quad-float \-msparclite \-mstack-bias
! \&\-msupersparc \-munaligned-doubles \-mv8\fR
.Sp
\&\fI\s-1ARM\s0 Options\fR
! \&\fB\-mapcs-frame \-mno-apcs-frame
! \&\-mapcs-26 \-mapcs-32
! \&\-mapcs-stack-check \-mno-apcs-stack-check
! \&\-mapcs-float \-mno-apcs-float
! \&\-mapcs-reentrant \-mno-apcs-reentrant
! \&\-msched-prolog \-mno-sched-prolog
! \&\-mlittle-endian \-mbig-endian \-mwords-little-endian
! \&\-malignment-traps \-mno-alignment-traps
! \&\-msoft-float \-mhard-float \-mfpe
! \&\-mthumb-interwork \-mno-thumb-interwork
\&\-mcpu=\fR\fIname\fR \fB\-march=\fR\fIname\fR \fB\-mfpe=\fR\fIname\fR
! \&\fB\-mstructure-size-boundary=\fR\fIn\fR
! \&\fB\-mabort-on-noreturn
! \&\-mlong-calls \-mno-long-calls
! \&\-msingle-pic-base \-mno-single-pic-base
! \&\-mpic-register=\fR\fIreg\fR
! \&\fB\-mnop-fun-dllimport
! \&\-mpoke-function-name
\&\-mthumb \-marm
! \&\-mtpcs-frame \-mtpcs-leaf-frame
! \&\-mcaller-super-interworking \-mcallee-super-interworking\fR
.Sp
\&\fI\s-1MN10200\s0 Options\fR
\&\fB\-mrelax\fR
.Sp
\&\fI\s-1MN10300\s0 Options\fR
! \&\fB\-mmult-bug \-mno-mult-bug
! \&\-mam33 \-mno-am33
! \&\-mno-crt0 \-mrelax\fR
.Sp
\&\fIM32R/D Options\fR
! \&\fB\-m32rx \-m32r \-mcode-model=\fR\fImodel-type\fR
\&\fB\-msdata=\fR\fIsdata-type\fR \fB\-G\fR \fInum\fR
.Sp
\&\fIM88K Options\fR
! \&\fB\-m88000 \-m88100 \-m88110 \-mbig-pic
! \&\-mcheck-zero-division \-mhandle-large-shift
! \&\-midentify-revision \-mno-check-zero-division
! \&\-mno-ocs-debug-info \-mno-ocs-frame-position
! \&\-mno-optimize-arg-area \-mno-serialize-volatile
! \&\-mno-underscores \-mocs-debug-info
! \&\-mocs-frame-position \-moptimize-arg-area
! \&\-mserialize-volatile \-mshort-data-\fR\fInum\fR \fB\-msvr3
! \&\-msvr4 \-mtrap-large-shift \-muse-div-instruction
! \&\-mversion-03.00 \-mwarn-passed-structs\fR
.Sp
\&\fI\s-1RS/6000\s0 and PowerPC Options\fR
\&\fB\-mcpu=\fR\fIcpu-type\fR
\&\fB\-mtune=\fR\fIcpu-type\fR
! \&\fB\-mpower \-mno-power \-mpower2 \-mno-power2
! \&\-mpowerpc \-mpowerpc64 \-mno-powerpc
! \&\-maltivec \-mno-altivec
! \&\-mpowerpc-gpopt \-mno-powerpc-gpopt
! \&\-mpowerpc-gfxopt \-mno-powerpc-gfxopt
! \&\-mnew-mnemonics \-mold-mnemonics
! \&\-mfull-toc \-mminimal-toc \-mno-fp-in-toc \-mno-sum-in-toc
! \&\-m64 \-m32 \-mxl-call \-mno-xl-call \-mpe
! \&\-msoft-float \-mhard-float \-mmultiple \-mno-multiple
! \&\-mstring \-mno-string \-mupdate \-mno-update
! \&\-mfused-madd \-mno-fused-madd \-mbit-align \-mno-bit-align
! \&\-mstrict-align \-mno-strict-align \-mrelocatable
! \&\-mno-relocatable \-mrelocatable-lib \-mno-relocatable-lib
! \&\-mtoc \-mno-toc \-mlittle \-mlittle-endian \-mbig \-mbig-endian
! \&\-mcall-aix \-mcall-sysv \-mcall-netbsd
! \&\-maix-struct-return \-msvr4\-struct-return
! \&\-mabi=altivec \-mabi=no-altivec
! \&\-mabi=spe \-mabi=no-spe
\&\-misel=yes \-misel=no
! \&\-mprototype \-mno-prototype
\&\-msim \-mmvme \-mads \-myellowknife \-memb \-msdata
\&\-msdata=\fR\fIopt\fR \fB\-mvxworks \-mwindiss \-G\fR \fInum\fR \fB\-pthread\fR
.Sp
--- 357,442 ----
\&\fB\-mtune=\fR\fIcpu-type\fR
\&\fB\-mcmodel=\fR\fIcode-model\fR
\&\fB\-m32 \-m64
! \&\-mapp\-regs \-mbroken\-saverestore \-mcypress
! \&\-mfaster\-structs \-mflat
! \&\-mfpu \-mhard\-float \-mhard\-quad\-float
! \&\-mimpure\-text \-mlittle\-endian \-mlive\-g0 \-mno\-app\-regs
! \&\-mno\-faster\-structs \-mno\-flat \-mno\-fpu
! \&\-mno\-impure\-text \-mno\-stack\-bias \-mno\-unaligned\-doubles
! \&\-msoft\-float \-msoft\-quad\-float \-msparclite \-mstack\-bias
! \&\-msupersparc \-munaligned\-doubles \-mv8
! \&\-threads \-pthreads\fR
.Sp
\&\fI\s-1ARM\s0 Options\fR
! \&\fB\-mapcs\-frame \-mno\-apcs\-frame
! \&\-mapcs\-26 \-mapcs\-32
! \&\-mapcs\-stack\-check \-mno\-apcs\-stack\-check
! \&\-mapcs\-float \-mno\-apcs\-float
! \&\-mapcs\-reentrant \-mno\-apcs\-reentrant
! \&\-msched\-prolog \-mno\-sched\-prolog
! \&\-mlittle\-endian \-mbig\-endian \-mwords\-little\-endian
! \&\-malignment\-traps \-mno\-alignment\-traps
! \&\-msoft\-float \-mhard\-float \-mfpe
! \&\-mthumb\-interwork \-mno\-thumb\-interwork
\&\-mcpu=\fR\fIname\fR \fB\-march=\fR\fIname\fR \fB\-mfpe=\fR\fIname\fR
! \&\fB\-mstructure\-size\-boundary=\fR\fIn\fR
! \&\fB\-mabort\-on\-noreturn
! \&\-mlong\-calls \-mno\-long\-calls
! \&\-msingle\-pic\-base \-mno\-single\-pic\-base
! \&\-mpic\-register=\fR\fIreg\fR
! \&\fB\-mnop\-fun\-dllimport
! \&\-mpoke\-function\-name
\&\-mthumb \-marm
! \&\-mtpcs\-frame \-mtpcs\-leaf\-frame
! \&\-mcaller\-super\-interworking \-mcallee\-super\-interworking\fR
.Sp
\&\fI\s-1MN10200\s0 Options\fR
\&\fB\-mrelax\fR
.Sp
\&\fI\s-1MN10300\s0 Options\fR
! \&\fB\-mmult\-bug \-mno\-mult\-bug
! \&\-mam33 \-mno\-am33
! \&\-mno\-crt0 \-mrelax\fR
.Sp
\&\fIM32R/D Options\fR
! \&\fB\-m32rx \-m32r \-mcode\-model=\fR\fImodel-type\fR
\&\fB\-msdata=\fR\fIsdata-type\fR \fB\-G\fR \fInum\fR
.Sp
\&\fIM88K Options\fR
! \&\fB\-m88000 \-m88100 \-m88110 \-mbig\-pic
! \&\-mcheck\-zero\-division \-mhandle\-large\-shift
! \&\-midentify\-revision \-mno\-check\-zero\-division
! \&\-mno\-ocs\-debug\-info \-mno\-ocs\-frame\-position
! \&\-mno\-optimize\-arg\-area \-mno\-serialize\-volatile
! \&\-mno\-underscores \-mocs\-debug\-info
! \&\-mocs\-frame\-position \-moptimize\-arg\-area
! \&\-mserialize\-volatile \-mshort\-data\-\fR\fInum\fR \fB\-msvr3
! \&\-msvr4 \-mtrap\-large\-shift \-muse\-div\-instruction
! \&\-mversion\-03.00 \-mwarn\-passed\-structs\fR
.Sp
\&\fI\s-1RS/6000\s0 and PowerPC Options\fR
\&\fB\-mcpu=\fR\fIcpu-type\fR
\&\fB\-mtune=\fR\fIcpu-type\fR
! \&\fB\-mpower \-mno\-power \-mpower2 \-mno\-power2
! \&\-mpowerpc \-mpowerpc64 \-mno\-powerpc
! \&\-maltivec \-mno\-altivec
! \&\-mpowerpc\-gpopt \-mno\-powerpc\-gpopt
! \&\-mpowerpc\-gfxopt \-mno\-powerpc\-gfxopt
! \&\-mnew\-mnemonics \-mold\-mnemonics
! \&\-mfull\-toc \-mminimal\-toc \-mno\-fp\-in\-toc \-mno\-sum\-in\-toc
! \&\-m64 \-m32 \-mxl\-call \-mno\-xl\-call \-mpe
! \&\-msoft\-float \-mhard\-float \-mmultiple \-mno\-multiple
! \&\-mstring \-mno\-string \-mupdate \-mno\-update
! \&\-mfused\-madd \-mno\-fused\-madd \-mbit\-align \-mno\-bit\-align
! \&\-mstrict\-align \-mno\-strict\-align \-mrelocatable
! \&\-mno\-relocatable \-mrelocatable\-lib \-mno\-relocatable\-lib
! \&\-mtoc \-mno\-toc \-mlittle \-mlittle\-endian \-mbig \-mbig\-endian
! \&\-mcall\-aix \-mcall\-sysv \-mcall\-netbsd
! \&\-maix\-struct\-return \-msvr4\-struct\-return
! \&\-mabi=altivec \-mabi=no\-altivec
! \&\-mabi=spe \-mabi=no\-spe
\&\-misel=yes \-misel=no
! \&\-mprototype \-mno\-prototype
\&\-msim \-mmvme \-mads \-myellowknife \-memb \-msdata
\&\-msdata=\fR\fIopt\fR \fB\-mvxworks \-mwindiss \-G\fR \fInum\fR \fB\-pthread\fR
.Sp
*************** in the following sections.
*** 454,460 ****
\&\fB\-all_load \-allowable_client \-arch \-arch_errors_fatal
\&\-arch_only \-bind_at_load \-bundle \-bundle_loader
\&\-client_name \-compatibility_version \-current_version
! \&\-dependency-file \-dylib_file \-dylinker_install_name
\&\-dynamic \-dynamiclib \-exported_symbols_list
\&\-filelist \-flat_namespace \-force_cpusubtype_ALL
\&\-force_flat_namespace \-headerpad_max_install_names
--- 445,451 ----
\&\fB\-all_load \-allowable_client \-arch \-arch_errors_fatal
\&\-arch_only \-bind_at_load \-bundle \-bundle_loader
\&\-client_name \-compatibility_version \-current_version
! \&\-dependency\-file \-dylib_file \-dylinker_install_name
\&\-dynamic \-dynamiclib \-exported_symbols_list
\&\-filelist \-flat_namespace \-force_cpusubtype_ALL
\&\-force_flat_namespace \-headerpad_max_install_names
*************** in the following sections.
*** 472,560 ****
\&\-unexported_symbols_list \-weak_reference_mismatches \-whatsloaded\fR
.Sp
\&\fI\s-1RT\s0 Options\fR
! \&\fB\-mcall-lib-mul \-mfp-arg-in-fpregs \-mfp-arg-in-gregs
! \&\-mfull-fp-blocks \-mhc-struct-return \-min-line-mul
! \&\-mminimum-fp-blocks \-mnohc-struct-return\fR
.Sp
\&\fI\s-1MIPS\s0 Options\fR
\&\fB\-mabicalls \-march=\fR\fIcpu-type\fR \fB\-mtune=\fR\fIcpu=type\fR
! \&\fB\-mcpu=\fR\fIcpu-type\fR \fB\-membedded-data \-muninit-const-in-rodata
! \&\-membedded-pic \-mfp32 \-mfp64 \-mfused-madd \-mno-fused-madd
\&\-mgas \-mgp32 \-mgp64
! \&\-mgpopt \-mhalf-pic \-mhard-float \-mint64 \-mips1
! \&\-mips2 \-mips3 \-mips4 \-mlong64 \-mlong32 \-mlong-calls \-mmemcpy
! \&\-mmips-as \-mmips-tfile \-mno-abicalls
! \&\-mno-embedded-data \-mno-uninit-const-in-rodata
! \&\-mno-embedded-pic \-mno-gpopt \-mno-long-calls
! \&\-mno-memcpy \-mno-mips-tfile \-mno-rnames \-mno-stats
! \&\-mrnames \-msoft-float
! \&\-m4650 \-msingle-float \-mmad
\&\-mstats \-EL \-EB \-G\fR \fInum\fR \fB\-nocpp
\&\-mabi=32 \-mabi=n32 \-mabi=64 \-mabi=eabi
! \&\-mfix7000 \-mno-crt0 \-mflush-func=\fR\fIfunc\fR \fB\-mno-flush-func
! \&\-mbranch-likely \-mno-branch-likely\fR
.Sp
\&\fIi386 and x86\-64 Options\fR
\&\fB\-mcpu=\fR\fIcpu-type\fR \fB\-march=\fR\fIcpu-type\fR
! \&\fB\-mfpmath=\fR\fIunit\fR \fB\-masm=\fR\fIdialect\fR \fB\-mno-fancy-math-387
! \&\-mno-fp-ret-in-387 \-msoft-float \-msvr3\-shlib
! \&\-mno-wide-multiply \-mrtd \-malign-double
! \&\-mpreferred-stack-boundary=\fR\fInum\fR
\&\fB\-mmmx \-msse \-msse2 \-msse3 \-m3dnow
! \&\-mthreads \-mno-align-stringops \-minline-all-stringops
! \&\-mpush-args \-maccumulate-outgoing-args \-m128bit-long-double
! \&\-m96bit-long-double \-mregparm=\fR\fInum\fR \fB\-momit-leaf-frame-pointer
! \&\-mno-red-zone
\&\-mcmodel=\fR\fIcode-model\fR
\&\fB\-m32 \-m64\fR
.Sp
\&\fI\s-1HPPA\s0 Options\fR
\&\fB\-march=\fR\fIarchitecture-type\fR
! \&\fB\-mbig-switch \-mdisable-fpregs \-mdisable-indexing
! \&\-mfast-indirect-calls \-mgas \-mgnu-ld \-mhp-ld
! \&\-mjump-in-delay \-mlinker-opt \-mlong-calls
! \&\-mlong-load-store \-mno-big-switch \-mno-disable-fpregs
! \&\-mno-disable-indexing \-mno-fast-indirect-calls \-mno-gas
! \&\-mno-jump-in-delay \-mno-long-load-store
! \&\-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 \-msio \-mwsio
\&\-nolibdld \-static \-threads\fR
.Sp
\&\fIIntel 960 Options\fR
! \&\fB\-m\fR\fIcpu-type\fR \fB\-masm-compat \-mclean-linkage
! \&\-mcode-align \-mcomplex-addr \-mleaf-procedures
! \&\-mic-compat \-mic2.0\-compat \-mic3.0\-compat
! \&\-mintel-asm \-mno-clean-linkage \-mno-code-align
! \&\-mno-complex-addr \-mno-leaf-procedures
! \&\-mno-old-align \-mno-strict-align \-mno-tail-call
! \&\-mnumerics \-mold-align \-msoft-float \-mstrict-align
! \&\-mtail-call\fR
.Sp
\&\fI\s-1DEC\s0 Alpha Options\fR
! \&\fB\-mno-fp-regs \-msoft-float \-malpha-as \-mgas
! \&\-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
! \&\-mmemory-latency=\fR\fItime\fR
.Sp
\&\fI\s-1DEC\s0 Alpha/VMS Options\fR
! \&\fB\-mvms-return-codes\fR
.Sp
\&\fIH8/300 Options\fR
! \&\fB\-mrelax \-mh \-ms \-mn \-mint32 \-malign-300\fR
.Sp
\&\fI\s-1SH\s0 Options\fR
\&\fB\-m1 \-m2 \-m3 \-m3e
! \&\-m4\-nofpu \-m4\-single-only \-m4\-single \-m4
! \&\-m5\-64media \-m5\-64media-nofpu
! \&\-m5\-32media \-m5\-32media-nofpu
! \&\-m5\-compact \-m5\-compact-nofpu
\&\-mb \-ml \-mdalign \-mrelax
\&\-mbigtable \-mfmovd \-mhitachi \-mnomacsave
\&\-mieee \-misize \-mpadstruct \-mspace
--- 463,551 ----
\&\-unexported_symbols_list \-weak_reference_mismatches \-whatsloaded\fR
.Sp
\&\fI\s-1RT\s0 Options\fR
! \&\fB\-mcall\-lib\-mul \-mfp\-arg\-in\-fpregs \-mfp\-arg\-in\-gregs
! \&\-mfull\-fp\-blocks \-mhc\-struct\-return \-min\-line\-mul
! \&\-mminimum\-fp\-blocks \-mnohc\-struct\-return\fR
.Sp
\&\fI\s-1MIPS\s0 Options\fR
\&\fB\-mabicalls \-march=\fR\fIcpu-type\fR \fB\-mtune=\fR\fIcpu=type\fR
! \&\fB\-mcpu=\fR\fIcpu-type\fR \fB\-membedded\-data \-muninit\-const\-in\-rodata
! \&\-membedded\-pic \-mfp32 \-mfp64 \-mfused\-madd \-mno\-fused\-madd
\&\-mgas \-mgp32 \-mgp64
! \&\-mgpopt \-mhalf\-pic \-mhard\-float \-mint64 \-mips1
! \&\-mips2 \-mips3 \-mips4 \-mlong64 \-mlong32 \-mlong\-calls \-mmemcpy
! \&\-mmips\-as \-mmips\-tfile \-mno\-abicalls
! \&\-mno\-embedded\-data \-mno\-uninit\-const\-in\-rodata
! \&\-mno\-embedded\-pic \-mno\-gpopt \-mno\-long\-calls
! \&\-mno\-memcpy \-mno\-mips\-tfile \-mno\-rnames \-mno\-stats
! \&\-mrnames \-msoft\-float
! \&\-m4650 \-msingle\-float \-mmad
\&\-mstats \-EL \-EB \-G\fR \fInum\fR \fB\-nocpp
\&\-mabi=32 \-mabi=n32 \-mabi=64 \-mabi=eabi
! \&\-mfix7000 \-mno\-crt0 \-mflush\-func=\fR\fIfunc\fR \fB\-mno\-flush\-func
! \&\-mbranch\-likely \-mno\-branch\-likely\fR
.Sp
\&\fIi386 and x86\-64 Options\fR
\&\fB\-mcpu=\fR\fIcpu-type\fR \fB\-march=\fR\fIcpu-type\fR
! \&\fB\-mfpmath=\fR\fIunit\fR \fB\-masm=\fR\fIdialect\fR \fB\-mno\-fancy\-math\-387
! \&\-mno\-fp\-ret\-in\-387 \-msoft\-float \-msvr3\-shlib
! \&\-mno\-wide\-multiply \-mrtd \-malign\-double
! \&\-mpreferred\-stack\-boundary=\fR\fInum\fR
\&\fB\-mmmx \-msse \-msse2 \-msse3 \-m3dnow
! \&\-mthreads \-mno\-align\-stringops \-minline\-all\-stringops
! \&\-mpush\-args \-maccumulate\-outgoing\-args \-m128bit\-long\-double
! \&\-m96bit\-long\-double \-mregparm=\fR\fInum\fR \fB\-momit\-leaf\-frame\-pointer
! \&\-mno\-red\-zone
\&\-mcmodel=\fR\fIcode-model\fR
\&\fB\-m32 \-m64\fR
.Sp
\&\fI\s-1HPPA\s0 Options\fR
\&\fB\-march=\fR\fIarchitecture-type\fR
! \&\fB\-mbig\-switch \-mdisable\-fpregs \-mdisable\-indexing
! \&\-mfast\-indirect\-calls \-mgas \-mgnu\-ld \-mhp\-ld
! \&\-mjump\-in\-delay \-mlinker\-opt \-mlong\-calls
! \&\-mlong\-load\-store \-mno\-big\-switch \-mno\-disable\-fpregs
! \&\-mno\-disable\-indexing \-mno\-fast\-indirect\-calls \-mno\-gas
! \&\-mno\-jump\-in\-delay \-mno\-long\-load\-store
! \&\-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 \-msio \-mwsio
\&\-nolibdld \-static \-threads\fR
.Sp
\&\fIIntel 960 Options\fR
! \&\fB\-m\fR\fIcpu-type\fR \fB\-masm\-compat \-mclean\-linkage
! \&\-mcode\-align \-mcomplex\-addr \-mleaf\-procedures
! \&\-mic\-compat \-mic2.0\-compat \-mic3.0\-compat
! \&\-mintel\-asm \-mno\-clean\-linkage \-mno\-code\-align
! \&\-mno\-complex\-addr \-mno\-leaf\-procedures
! \&\-mno\-old\-align \-mno\-strict\-align \-mno\-tail\-call
! \&\-mnumerics \-mold\-align \-msoft\-float \-mstrict\-align
! \&\-mtail\-call\fR
.Sp
\&\fI\s-1DEC\s0 Alpha Options\fR
! \&\fB\-mno\-fp\-regs \-msoft\-float \-malpha\-as \-mgas
! \&\-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
! \&\-mmemory\-latency=\fR\fItime\fR
.Sp
\&\fI\s-1DEC\s0 Alpha/VMS Options\fR
! \&\fB\-mvms\-return\-codes\fR
.Sp
\&\fIH8/300 Options\fR
! \&\fB\-mrelax \-mh \-ms \-mn \-mint32 \-malign\-300\fR
.Sp
\&\fI\s-1SH\s0 Options\fR
\&\fB\-m1 \-m2 \-m3 \-m3e
! \&\-m4\-nofpu \-m4\-single\-only \-m4\-single \-m4
! \&\-m5\-64media \-m5\-64media\-nofpu
! \&\-m5\-32media \-m5\-32media\-nofpu
! \&\-m5\-compact \-m5\-compact\-nofpu
\&\-mb \-ml \-mdalign \-mrelax
\&\-mbigtable \-mfmovd \-mhitachi \-mnomacsave
\&\-mieee \-misize \-mpadstruct \-mspace
*************** in the following sections.
*** 565,695 ****
.Sp
\&\fI\s-1ARC\s0 Options\fR
\&\fB\-EB \-EL
! \&\-mmangle-cpu \-mcpu=\fR\fIcpu\fR \fB\-mtext=\fR\fItext-section\fR
\&\fB\-mdata=\fR\fIdata-section\fR \fB\-mrodata=\fR\fIreadonly-data-section\fR
.Sp
\&\fITMS320C3x/C4x Options\fR
\&\fB\-mcpu=\fR\fIcpu\fR \fB\-mbig \-msmall \-mregparm \-mmemparm
! \&\-mfast-fix \-mmpyi \-mbk \-mti \-mdp-isr-reload
! \&\-mrpts=\fR\fIcount\fR \fB\-mrptb \-mdb \-mloop-unsigned
! \&\-mparallel-insns \-mparallel-mpy \-mpreserve-float\fR
.Sp
\&\fIV850 Options\fR
! \&\fB\-mlong-calls \-mno-long-calls \-mep \-mno-ep
! \&\-mprolog-function \-mno-prolog-function \-mspace
\&\-mtda=\fR\fIn\fR \fB\-msda=\fR\fIn\fR \fB\-mzda=\fR\fIn\fR
! \&\fB\-mapp-regs \-mno-app-regs
! \&\-mdisable-callt \-mno-disable-callt
\&\-mv850e
! \&\-mv850 \-mbig-switch\fR
.Sp
\&\fI\s-1NS32K\s0 Options\fR
\&\fB\-m32032 \-m32332 \-m32532 \-m32081 \-m32381
! \&\-mmult-add \-mnomult-add \-msoft-float \-mrtd \-mnortd
\&\-mregparam \-mnoregparam \-msb \-mnosb
\&\-mbitfield \-mnobitfield \-mhimem \-mnohimem\fR
.Sp
\&\fI\s-1AVR\s0 Options\fR
! \&\fB\-mmcu=\fR\fImcu\fR \fB\-msize \-minit-stack=\fR\fIn\fR \fB\-mno-interrupts
! \&\-mcall-prologues \-mno-tablejump \-mtiny-stack\fR
.Sp
\&\fIMCore Options\fR
! \&\fB\-mhardlit \-mno-hardlit \-mdiv \-mno-div \-mrelax-immediates
! \&\-mno-relax-immediates \-mwide-bitfields \-mno-wide-bitfields
! \&\-m4byte-functions \-mno-4byte-functions \-mcallgraph-data
! \&\-mno-callgraph-data \-mslow-bytes \-mno-slow-bytes \-mno-lsim
! \&\-mlittle-endian \-mbig-endian \-m210 \-m340 \-mstack-increment\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-1IA-64\s0 Options\fR
! \&\fB\-mbig-endian \-mlittle-endian \-mgnu-as \-mgnu-ld \-mno-pic
! \&\-mvolatile-asm-stop \-mb-step \-mregister-names \-mno-sdata
! \&\-mconstant-gp \-mauto-pic \-minline-float-divide-min-latency
! \&\-minline-float-divide-max-throughput
! \&\-minline-int-divide-min-latency
! \&\-minline-int-divide-max-throughput \-mno-dwarf2\-asm
! \&\-mfixed-range=\fR\fIregister-range\fR
.Sp
\&\fID30V Options\fR
! \&\fB\-mextmem \-mextmemory \-monchip \-mno-asm-optimize
! \&\-masm-optimize \-mbranch-cost=\fR\fIn\fR \fB\-mcond-exec=\fR\fIn\fR
.Sp
\&\fIS/390 and zSeries Options\fR
! \&\fB\-mhard-float \-msoft-float \-mbackchain \-mno-backchain
! \&\-msmall-exec \-mno-small-exec \-mmvcle \-mno-mvcle
! \&\-m64 \-m31 \-mdebug \-mno-debug\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\-melinux-stacksize=\fR\fIn\fR
! \&\fB\-metrax4 \-metrax100 \-mpdebug \-mcc-init \-mno-side-effects
! \&\-mstack-align \-mdata-align \-mconst-align
! \&\-m32\-bit \-m16\-bit \-m8\-bit \-mno-prologue-epilogue \-mno-gotplt
\&\-melf \-maout \-melinux \-mlinux \-sim \-sim2
! \&\-mmul-bug-workaround \-mno-mul-bug-workaround\fR
.Sp
! \&\fI\s-1PDP-11\s0 Options\fR
! \&\fB\-mfpu \-msoft-float \-mac0 \-mno-ac0 \-m40 \-m45 \-m10
! \&\-mbcopy \-mbcopy-builtin \-mint32 \-mno-int16
! \&\-mint16 \-mno-int32 \-mfloat32 \-mno-float64
! \&\-mfloat64 \-mno-float32 \-mabshi \-mno-abshi
! \&\-mbranch-expensive \-mbranch-cheap
! \&\-msplit \-mno-split \-munix-asm \-mdec-asm\fR
.Sp
\&\fIXstormy16 Options\fR
\&\fB\-msim\fR
.Sp
\&\fIXtensa Options\fR
! \&\fB\-mbig-endian \-mlittle-endian
! \&\-mdensity \-mno-density
! \&\-mmac16 \-mno-mac16
! \&\-mmul16 \-mno-mul16
! \&\-mmul32 \-mno-mul32
! \&\-mnsa \-mno-nsa
! \&\-mminmax \-mno-minmax
! \&\-msext \-mno-sext
! \&\-mbooleans \-mno-booleans
! \&\-mhard-float \-msoft-float
! \&\-mfused-madd \-mno-fused-madd
! \&\-mserialize-volatile \-mno-serialize-volatile
! \&\-mtext-section-literals \-mno-text-section-literals
! \&\-mtarget-align \-mno-target-align
! \&\-mlongcalls \-mno-longcalls\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 \-mdouble \-mno-double
! \&\-mmedia \-mno-media \-mmuladd \-mno-muladd \-mlibrary-pic
! \&\-macc-4 \-macc-8 \-mpack \-mno-pack \-mno-eflags
! \&\-mcond-move \-mno-cond-move \-mscc \-mno-scc
! \&\-mcond-exec \-mno-cond-exec \-mvliw-branch \-mno-vliw-branch
! \&\-mmulti-cond-exec \-mno-multi-cond-exec \-mnested-cond-exec
! \&\-mno-nested-cond-exec \-mtomcat-stats
\&\-mcpu=\fR\fIcpu\fR
! .Ip "\fICode Generation Options\fR" 4
.IX Item "Code Generation Options"
! \&\fB\-fcall-saved-\fR\fIreg\fR \fB\-fcall-used-\fR\fIreg\fR
! \&\fB\-ffixed-\fR\fIreg\fR \fB\-fexceptions
! \&\-fnon-call-exceptions \-funwind-tables
! \&\-fasynchronous-unwind-tables
! \&\-finhibit-size-directive \-finstrument-functions
! \&\-fno-common \-fno-ident \-fno-gnu-linker
! \&\-fpcc-struct-return \-fpic \-fPIC
! \&\-freg-struct-return \-fshared-data \-fshort-enums
! \&\-fshort-double \-fshort-wchar \-fvolatile
! \&\-fvolatile-global \-fvolatile-static
! \&\-fverbose-asm \-fpack-struct \-fstack-check
! \&\-fstack-limit-register=\fR\fIreg\fR \fB\-fstack-limit-symbol=\fR\fIsym\fR
! \&\fB\-fargument-alias \-fargument-noalias
! \&\-fargument-noalias-global \-fleading-underscore
! \&\-ftls-model=\fR\fImodel\fR
! \&\fB\-ftrapv \-fbounds-check\fR
.Sh "Options Controlling the Kind of Output"
.IX Subsection "Options Controlling the Kind of Output"
Compilation can involve up to four stages: preprocessing, compilation
--- 556,686 ----
.Sp
\&\fI\s-1ARC\s0 Options\fR
\&\fB\-EB \-EL
! \&\-mmangle\-cpu \-mcpu=\fR\fIcpu\fR \fB\-mtext=\fR\fItext-section\fR
\&\fB\-mdata=\fR\fIdata-section\fR \fB\-mrodata=\fR\fIreadonly-data-section\fR
.Sp
\&\fITMS320C3x/C4x Options\fR
\&\fB\-mcpu=\fR\fIcpu\fR \fB\-mbig \-msmall \-mregparm \-mmemparm
! \&\-mfast\-fix \-mmpyi \-mbk \-mti \-mdp\-isr\-reload
! \&\-mrpts=\fR\fIcount\fR \fB\-mrptb \-mdb \-mloop\-unsigned
! \&\-mparallel\-insns \-mparallel\-mpy \-mpreserve\-float\fR
.Sp
\&\fIV850 Options\fR
! \&\fB\-mlong\-calls \-mno\-long\-calls \-mep \-mno\-ep
! \&\-mprolog\-function \-mno\-prolog\-function \-mspace
\&\-mtda=\fR\fIn\fR \fB\-msda=\fR\fIn\fR \fB\-mzda=\fR\fIn\fR
! \&\fB\-mapp\-regs \-mno\-app\-regs
! \&\-mdisable\-callt \-mno\-disable\-callt
\&\-mv850e
! \&\-mv850 \-mbig\-switch\fR
.Sp
\&\fI\s-1NS32K\s0 Options\fR
\&\fB\-m32032 \-m32332 \-m32532 \-m32081 \-m32381
! \&\-mmult\-add \-mnomult\-add \-msoft\-float \-mrtd \-mnortd
\&\-mregparam \-mnoregparam \-msb \-mnosb
\&\-mbitfield \-mnobitfield \-mhimem \-mnohimem\fR
.Sp
\&\fI\s-1AVR\s0 Options\fR
! \&\fB\-mmcu=\fR\fImcu\fR \fB\-msize \-minit\-stack=\fR\fIn\fR \fB\-mno\-interrupts
! \&\-mcall\-prologues \-mno\-tablejump \-mtiny\-stack\fR
.Sp
\&\fIMCore Options\fR
! \&\fB\-mhardlit \-mno\-hardlit \-mdiv \-mno\-div \-mrelax\-immediates
! \&\-mno\-relax\-immediates \-mwide\-bitfields \-mno\-wide\-bitfields
! \&\-m4byte\-functions \-mno\-4byte\-functions \-mcallgraph\-data
! \&\-mno\-callgraph\-data \-mslow\-bytes \-mno\-slow\-bytes \-mno\-lsim
! \&\-mlittle\-endian \-mbig\-endian \-m210 \-m340 \-mstack\-increment\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-1IA\-64\s0 Options\fR
! \&\fB\-mbig\-endian \-mlittle\-endian \-mgnu\-as \-mgnu\-ld \-mno\-pic
! \&\-mvolatile\-asm\-stop \-mb\-step \-mregister\-names \-mno\-sdata
! \&\-mconstant\-gp \-mauto\-pic \-minline\-float\-divide\-min\-latency
! \&\-minline\-float\-divide\-max\-throughput
! \&\-minline\-int\-divide\-min\-latency
! \&\-minline\-int\-divide\-max\-throughput \-mno\-dwarf2\-asm
! \&\-mfixed\-range=\fR\fIregister-range\fR
.Sp
\&\fID30V Options\fR
! \&\fB\-mextmem \-mextmemory \-monchip \-mno\-asm\-optimize
! \&\-masm\-optimize \-mbranch\-cost=\fR\fIn\fR \fB\-mcond\-exec=\fR\fIn\fR
.Sp
\&\fIS/390 and zSeries Options\fR
! \&\fB\-mhard\-float \-msoft\-float \-mbackchain \-mno\-backchain
! \&\-msmall\-exec \-mno\-small\-exec \-mmvcle \-mno\-mvcle
! \&\-m64 \-m31 \-mdebug \-mno\-debug\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\-melinux\-stacksize=\fR\fIn\fR
! \&\fB\-metrax4 \-metrax100 \-mpdebug \-mcc\-init \-mno\-side\-effects
! \&\-mstack\-align \-mdata\-align \-mconst\-align
! \&\-m32\-bit \-m16\-bit \-m8\-bit \-mno\-prologue\-epilogue \-mno\-gotplt
\&\-melf \-maout \-melinux \-mlinux \-sim \-sim2
! \&\-mmul\-bug\-workaround \-mno\-mul\-bug\-workaround\fR
.Sp
! \&\fI\s-1PDP\-11\s0 Options\fR
! \&\fB\-mfpu \-msoft\-float \-mac0 \-mno\-ac0 \-m40 \-m45 \-m10
! \&\-mbcopy \-mbcopy\-builtin \-mint32 \-mno\-int16
! \&\-mint16 \-mno\-int32 \-mfloat32 \-mno\-float64
! \&\-mfloat64 \-mno\-float32 \-mabshi \-mno\-abshi
! \&\-mbranch\-expensive \-mbranch\-cheap
! \&\-msplit \-mno\-split \-munix\-asm \-mdec\-asm\fR
.Sp
\&\fIXstormy16 Options\fR
\&\fB\-msim\fR
.Sp
\&\fIXtensa Options\fR
! \&\fB\-mbig\-endian \-mlittle\-endian
! \&\-mdensity \-mno\-density
! \&\-mmac16 \-mno\-mac16
! \&\-mmul16 \-mno\-mul16
! \&\-mmul32 \-mno\-mul32
! \&\-mnsa \-mno\-nsa
! \&\-mminmax \-mno\-minmax
! \&\-msext \-mno\-sext
! \&\-mbooleans \-mno\-booleans
! \&\-mhard\-float \-msoft\-float
! \&\-mfused\-madd \-mno\-fused\-madd
! \&\-mserialize\-volatile \-mno\-serialize\-volatile
! \&\-mtext\-section\-literals \-mno\-text\-section\-literals
! \&\-mtarget\-align \-mno\-target\-align
! \&\-mlongcalls \-mno\-longcalls\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 \-mdouble \-mno\-double
! \&\-mmedia \-mno\-media \-mmuladd \-mno\-muladd \-mlibrary\-pic
! \&\-macc\-4 \-macc\-8 \-mpack \-mno\-pack \-mno\-eflags
! \&\-mcond\-move \-mno\-cond\-move \-mscc \-mno\-scc
! \&\-mcond\-exec \-mno\-cond\-exec \-mvliw\-branch \-mno\-vliw\-branch
! \&\-mmulti\-cond\-exec \-mno\-multi\-cond\-exec \-mnested\-cond\-exec
! \&\-mno\-nested\-cond\-exec \-mtomcat\-stats
\&\-mcpu=\fR\fIcpu\fR
! .IP "\fICode Generation Options\fR" 4
.IX Item "Code Generation Options"
! \&\fB\-fcall\-saved\-\fR\fIreg\fR \fB\-fcall\-used\-\fR\fIreg\fR
! \&\fB\-ffixed\-\fR\fIreg\fR \fB\-fexceptions
! \&\-fnon\-call\-exceptions \-funwind\-tables
! \&\-fasynchronous\-unwind\-tables
! \&\-finhibit\-size\-directive \-finstrument\-functions
! \&\-fno\-common \-fno\-ident \-fno\-gnu\-linker
! \&\-fpcc\-struct\-return \-fpic \-fPIC
! \&\-freg\-struct\-return \-fshared\-data \-fshort\-enums
! \&\-fshort\-double \-fshort\-wchar \-fvolatile
! \&\-fvolatile\-global \-fvolatile\-static
! \&\-fverbose\-asm \-fpack\-struct \-fstack\-check
! \&\-fstack\-limit\-register=\fR\fIreg\fR \fB\-fstack\-limit\-symbol=\fR\fIsym\fR
! \&\fB\-fargument\-alias \-fargument\-noalias
! \&\-fargument\-noalias\-global \-fleading\-underscore
! \&\-ftls\-model=\fR\fImodel\fR
! \&\fB\-ftrapv \-fbounds\-check\fR
.Sh "Options Controlling the Kind of Output"
.IX Subsection "Options Controlling the Kind of Output"
Compilation can involve up to four stages: preprocessing, compilation
*************** compiled, and those specified as input)
*** 700,788 ****
.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 which must be preprocessed.
! .Ip "\fIfile\fR\fB.i\fR" 4
.IX Item "file.i"
C source code which should not be preprocessed.
! .Ip "\fIfile\fR\fB.ii\fR" 4
.IX Item "file.ii"
\&\*(C+ source code which 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 library
\&\fIlibobjc.a\fR to make an Objective-C program work.
! .Ip "\fIfile\fR\fB.mi\fR" 4
.IX Item "file.mi"
Objective-C source code which should not be preprocessed.
! .Ip "\fIfile\fR\fB.h\fR" 4
.IX Item "file.h"
C header file (not to be compiled or linked).
! .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.c++\fR" 4
.IX Item "file.c++"
! .Ip "\fIfile\fR\fB.C\fR" 4
.IX Item "file.C"
.PD
\&\*(C+ source code which 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.f\fR" 4
.IX Item "file.f"
.PD 0
! .Ip "\fIfile\fR\fB.for\fR" 4
.IX Item "file.for"
! .Ip "\fIfile\fR\fB.FOR\fR" 4
.IX Item "file.FOR"
.PD
Fortran source code which should not be preprocessed.
! .Ip "\fIfile\fR\fB.F\fR" 4
.IX Item "file.F"
.PD 0
! .Ip "\fIfile\fR\fB.fpp\fR" 4
.IX Item "file.fpp"
! .Ip "\fIfile\fR\fB.FPP\fR" 4
.IX Item "file.FPP"
.PD
Fortran source code which must be preprocessed (with the traditional
preprocessor).
! .Ip "\fIfile\fR\fB.r\fR" 4
.IX Item "file.r"
Fortran source code which must be preprocessed with a \s-1RATFOR\s0
preprocessor (not included with \s-1GCC\s0).
! .Ip "\fIfile\fR\fB.ads\fR" 4
.IX Item "file.ads"
Ada source code file which 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"
Assembler code which 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.
.PP
You can specify the input language explicitly with the \fB\-x\fR option:
! .Ip "\fB\-x\fR \fIlanguage\fR" 4
.IX Item "-x language"
Specify explicitly the \fIlanguage\fR for the following input files
(rather than letting the compiler choose a default based on the file
--- 691,779 ----
.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 which must be preprocessed.
! .IP "\fIfile\fR\fB.i\fR" 4
.IX Item "file.i"
C source code which should not be preprocessed.
! .IP "\fIfile\fR\fB.ii\fR" 4
.IX Item "file.ii"
\&\*(C+ source code which 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 library
\&\fIlibobjc.a\fR to make an Objective-C program work.
! .IP "\fIfile\fR\fB.mi\fR" 4
.IX Item "file.mi"
Objective-C source code which should not be preprocessed.
! .IP "\fIfile\fR\fB.h\fR" 4
.IX Item "file.h"
C header file (not to be compiled or linked).
! .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.c++\fR" 4
.IX Item "file.c++"
! .IP "\fIfile\fR\fB.C\fR" 4
.IX Item "file.C"
.PD
\&\*(C+ source code which 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.f\fR" 4
.IX Item "file.f"
.PD 0
! .IP "\fIfile\fR\fB.for\fR" 4
.IX Item "file.for"
! .IP "\fIfile\fR\fB.FOR\fR" 4
.IX Item "file.FOR"
.PD
Fortran source code which should not be preprocessed.
! .IP "\fIfile\fR\fB.F\fR" 4
.IX Item "file.F"
.PD 0
! .IP "\fIfile\fR\fB.fpp\fR" 4
.IX Item "file.fpp"
! .IP "\fIfile\fR\fB.FPP\fR" 4
.IX Item "file.FPP"
.PD
Fortran source code which must be preprocessed (with the traditional
preprocessor).
! .IP "\fIfile\fR\fB.r\fR" 4
.IX Item "file.r"
Fortran source code which must be preprocessed with a \s-1RATFOR\s0
preprocessor (not included with \s-1GCC\s0).
! .IP "\fIfile\fR\fB.ads\fR" 4
.IX Item "file.ads"
Ada source code file which 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"
Assembler code which 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.
.PP
You can specify the input language explicitly with the \fB\-x\fR option:
! .IP "\fB\-x\fR \fIlanguage\fR" 4
.IX Item "-x language"
Specify explicitly the \fIlanguage\fR for the following input files
(rather than letting the compiler choose a default based on the file
*************** the next \fB\-x\fR option. Possible val
*** 799,814 ****
\& java
\& treelang
.Ve
! .Ip "\fB\-x none\fR" 4
.IX Item "-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 \fB\-x\fR
has not been used at all).
! .Ip "\fB\-pass-exit-codes\fR" 4
.IX Item "-pass-exit-codes"
Normally the \fBgcc\fR program will exit 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 will instead return with
numerically highest error produced by any phase that returned an error
indication.
.PP
--- 790,805 ----
\& java
\& treelang
.Ve
! .IP "\fB\-x none\fR" 4
.IX Item "-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 \fB\-x\fR
has not been used at all).
! .IP "\fB\-pass\-exit\-codes\fR" 4
.IX Item "-pass-exit-codes"
Normally the \fBgcc\fR program will exit 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 will instead return with
numerically highest error produced by any phase that returned an error
indication.
.PP
*************** If you only want some of the stages of c
*** 817,823 ****
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
--- 808,814 ----
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,
*** 828,834 ****
.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
--- 819,825 ----
.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
*************** By default, the assembler file name for
*** 838,851 ****
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 which don't require preprocessing are ignored.
! .Ip "\fB\-o\fR \fIfile\fR" 4
.IX Item "-o file"
Place output in file \fIfile\fR. This applies regardless to whatever
sort of output is being produced, whether it be an executable file,
--- 829,842 ----
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 which don't require preprocessing are ignored.
! .IP "\fB\-o\fR \fIfile\fR" 4
.IX Item "-o file"
Place output in file \fIfile\fR. This applies regardless to whatever
sort of output is being produced, whether it be an executable file,
*************** If \fB\-o\fR is not specified, the defau
*** 859,895 ****
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, and
all preprocessed C source on standard output.
! .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 all command
arguments are quoted. This is useful for shell scripts to capture the
driver-generated command lines.
! .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\*(--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 will also be passed on to the various processes
invoked by \fBgcc\fR, so that they can display the command line options
they accept. If the \fB\-W\fR option is also specified then command
line options which have no documentation associated with them will also
be 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.
! .Ip "\fB\*(--version\fR" 4
! .IX Item "version"
Display the version number and copyrights of the invoked \s-1GCC\s0.
.Sh "Compiling \*(C+ Programs"
.IX Subsection "Compiling Programs"
--- 850,886 ----
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, and
all preprocessed C source on standard output.
! .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 all command
arguments are quoted. This is useful for shell scripts to capture the
driver-generated command lines.
! .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\-\-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 will also be passed on to the various processes
invoked by \fBgcc\fR, so that they can display the command line options
they accept. If the \fB\-W\fR option is also specified then command
line options which have no documentation associated with them will also
be 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.
! .IP "\fB\-\-version\fR" 4
! .IX Item "--version"
Display the version number and copyrights of the invoked \s-1GCC\s0.
.Sh "Compiling \*(C+ Programs"
.IX Subsection "Compiling Programs"
*************** languages; or options that are meaningfu
*** 916,923 ****
.Sh "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+ and Objective-C) that the compiler accepts:
! .Ip "\fB\-ansi\fR" 4
.IX Item "-ansi"
In C mode, support all \s-1ISO\s0 C90 programs. In \*(C+ mode,
remove \s-1GNU\s0 extensions that conflict with \s-1ISO\s0 \*(C+.
--- 907,914 ----
.Sh "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+ and Objective\-C) that the compiler accepts:
! .IP "\fB\-ansi\fR" 4
.IX Item "-ansi"
In C mode, support all \s-1ISO\s0 C90 programs. In \*(C+ mode,
remove \s-1GNU\s0 extensions that conflict with \s-1ISO\s0 \*(C+.
*************** programs that might use these names for
*** 952,1001 ****
Functions which would normally be built in but do not have semantics
defined by \s-1ISO\s0 C (such as \f(CW\*(C`alloca\*(C'\fR and \f(CW\*(C`ffs\*(C'\fR) are not built-in
functions with \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+. A value for this option must be
provided; possible values are
.RS 4
! .Ip "\fBc89\fR" 4
.IX Item "c89"
.PD 0
! .Ip "\fBiso9899:1990\fR" 4
.IX Item "iso9899:1990"
.PD
\&\s-1ISO\s0 C90 (same as \fB\-ansi\fR).
! .Ip "\fBiso9899:199409\fR" 4
.IX Item "iso9899:199409"
\&\s-1ISO\s0 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
\&\s-1ISO\s0 C99. Note that this standard is not yet fully supported; see
! <\fBhttp://gcc.gnu.org/gcc-3.3/c99status.html\fR> for more information. The
names \fBc9x\fR and \fBiso9899:199x\fR are deprecated.
! .Ip "\fBgnu89\fR" 4
.IX Item "gnu89"
Default, \s-1ISO\s0 C90 plus \s-1GNU\s0 extensions (including some C99 features).
! .Ip "\fBgnu99\fR" 4
.IX Item "gnu99"
.PD 0
! .Ip "\fBgnu9x\fR" 4
.IX Item "gnu9x"
.PD
\&\s-1ISO\s0 C99 plus \s-1GNU\s0 extensions. When \s-1ISO\s0 C99 is fully implemented in \s-1GCC\s0,
this will become the default. The name \fBgnu9x\fR is deprecated.
! .Ip "\fBc++98\fR" 4
.IX Item "c++98"
The 1998 \s-1ISO\s0 \*(C+ standard plus amendments.
! .Ip "\fBgnu++98\fR" 4
.IX Item "gnu++98"
The same as \fB\-std=c++98\fR plus \s-1GNU\s0 extensions. This is the
default for \*(C+ code.
--- 943,992 ----
Functions which would normally be built in but do not have semantics
defined by \s-1ISO\s0 C (such as \f(CW\*(C`alloca\*(C'\fR and \f(CW\*(C`ffs\*(C'\fR) are not built-in
functions with \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+. A value for this option must be
provided; possible values are
.RS 4
! .IP "\fBc89\fR" 4
.IX Item "c89"
.PD 0
! .IP "\fBiso9899:1990\fR" 4
.IX Item "iso9899:1990"
.PD
\&\s-1ISO\s0 C90 (same as \fB\-ansi\fR).
! .IP "\fBiso9899:199409\fR" 4
.IX Item "iso9899:199409"
\&\s-1ISO\s0 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
\&\s-1ISO\s0 C99. Note that this standard is not yet fully supported; see
! <\fBhttp://gcc.gnu.org/gcc\-3.3/c99status.html\fR> for more information. The
names \fBc9x\fR and \fBiso9899:199x\fR are deprecated.
! .IP "\fBgnu89\fR" 4
.IX Item "gnu89"
Default, \s-1ISO\s0 C90 plus \s-1GNU\s0 extensions (including some C99 features).
! .IP "\fBgnu99\fR" 4
.IX Item "gnu99"
.PD 0
! .IP "\fBgnu9x\fR" 4
.IX Item "gnu9x"
.PD
\&\s-1ISO\s0 C99 plus \s-1GNU\s0 extensions. When \s-1ISO\s0 C99 is fully implemented in \s-1GCC\s0,
this will become the default. The name \fBgnu9x\fR is deprecated.
! .IP "\fBc++98\fR" 4
.IX Item "c++98"
The 1998 \s-1ISO\s0 \*(C+ standard plus amendments.
! .IP "\fBgnu++98\fR" 4
.IX Item "gnu++98"
The same as \fB\-std=c++98\fR plus \s-1GNU\s0 extensions. This is the
default for \*(C+ code.
*************** effects as \fB\-ansi\fR, except that fea
*** 1012,1018 ****
but are in the specified version (for example, \fB//\fR comments and
the \f(CW\*(C`inline\*(C'\fR keyword in \s-1ISO\s0 C99) are not disabled.
.RE
! .Ip "\fB\-aux-info\fR \fIfilename\fR" 4
.IX Item "-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
--- 1003,1009 ----
but are in the specified version (for example, \fB//\fR comments and
the \f(CW\*(C`inline\*(C'\fR keyword in \s-1ISO\s0 C99) are not disabled.
.RE
! .IP "\fB\-aux\-info\fR \fIfilename\fR" 4
.IX Item "-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
*************** implicit, prototyped or unprototyped (\f
*** 1024,1049 ****
\&\fBO\fR for old, respectively, in the first character after the line
number and the colon), and whether it came from a declaration or a
definition (\fBC\fR or \fBF\fR, 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.
! .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. \fB\-ansi\fR implies \fB\-fno-asm\fR.
.Sp
In \*(C+, this switch only affects the \f(CW\*(C`typeof\*(C'\fR keyword, since
\&\f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`inline\*(C'\fR are standard keywords. You may want to
! use the \fB\-fno-gnu-keywords\fR flag instead, which has the same
effect. 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\s0 C99.
! .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
--- 1015,1040 ----
\&\fBO\fR for old, respectively, in the first character after the line
number and the colon), and whether it came from a declaration or a
definition (\fBC\fR or \fBF\fR, 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.
! .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. \fB\-ansi\fR implies \fB\-fno\-asm\fR.
.Sp
In \*(C+, this switch only affects the \f(CW\*(C`typeof\*(C'\fR keyword, since
\&\f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`inline\*(C'\fR are standard keywords. You may want to
! use the \fB\-fno\-gnu\-keywords\fR flag instead, which has the same
effect. 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\s0 C99.
! .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
*************** and faster, but since the function calls
*** 1057,1097 ****
cannot set a breakpoint on those calls, nor can you change the behavior
of the functions by linking with a different library.
.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 this 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\-fhosted\fR" 4
.IX Item "-fhosted"
Assert that compilation takes place in 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\-ffreestanding\fR" 4
.IX Item "-ffreestanding"
Assert that compilation takes place in 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\-fms-extensions\fR" 4
.IX Item "-fms-extensions"
Accept some non-standard constructs used in Microsoft header files.
! .Ip "\fB\-trigraphs\fR" 4
.IX Item "-trigraphs"
Support \s-1ISO\s0 C trigraphs. The \fB\-ansi\fR option (and \fB\-std\fR
options for strict \s-1ISO\s0 C conformance) implies \fB\-trigraphs\fR.
! .Ip "\fB\-no-integrated-cpp\fR" 4
.IX Item "-no-integrated-cpp"
Performs a compilation in two passes: preprocessing and compiling. This
option allows a user supplied \*(L"cc1\*(R", \*(L"cc1plus\*(R", or \*(L"cc1obj\*(R" via the
--- 1048,1088 ----
cannot set a breakpoint on those calls, nor can you change the behavior
of the functions by linking with a different library.
.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 this 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\-fhosted\fR" 4
.IX Item "-fhosted"
Assert that compilation takes place in 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\-ffreestanding\fR" 4
.IX Item "-ffreestanding"
Assert that compilation takes place in 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\-fms\-extensions\fR" 4
.IX Item "-fms-extensions"
Accept some non-standard constructs used in Microsoft header files.
! .IP "\fB\-trigraphs\fR" 4
.IX Item "-trigraphs"
Support \s-1ISO\s0 C trigraphs. The \fB\-ansi\fR option (and \fB\-std\fR
options for strict \s-1ISO\s0 C conformance) implies \fB\-trigraphs\fR.
! .IP "\fB\-no\-integrated\-cpp\fR" 4
.IX Item "-no-integrated-cpp"
Performs a compilation in two passes: preprocessing and compiling. This
option allows a user supplied \*(L"cc1\*(R", \*(L"cc1plus\*(R", or \*(L"cc1obj\*(R" via the
*************** compiling. The default is to use the int
*** 1101,1122 ****
.Sp
The semantics of this option will change if \*(L"cc1\*(R", \*(L"cc1plus\*(R", and
\&\*(L"cc1obj\*(R" are merged.
! .Ip "\fB\-traditional\fR" 4
.IX Item "-traditional"
.PD 0
! .Ip "\fB\-traditional-cpp\fR" 4
.IX Item "-traditional-cpp"
.PD
Formerly, these options caused \s-1GCC\s0 to attempt to emulate a pre-standard
C compiler. They are now only supported with the \fB\-E\fR switch.
The preprocessor continues to support a pre-standard mode. See the \s-1GNU\s0
\&\s-1CPP\s0 manual for details.
! .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\-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
--- 1092,1113 ----
.Sp
The semantics of this option will change if \*(L"cc1\*(R", \*(L"cc1plus\*(R", and
\&\*(L"cc1obj\*(R" are merged.
! .IP "\fB\-traditional\fR" 4
.IX Item "-traditional"
.PD 0
! .IP "\fB\-traditional\-cpp\fR" 4
.IX Item "-traditional-cpp"
.PD
Formerly, these options caused \s-1GCC\s0 to attempt to emulate a pre-standard
C compiler. They are now only supported with the \fB\-E\fR switch.
The preprocessor continues to support a pre-standard mode. See the \s-1GNU\s0
\&\s-1CPP\s0 manual for details.
! .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\-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
*** 1134,1161 ****
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\-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\-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\-fwritable-strings\fR" 4
.IX Item "-fwritable-strings"
Store string constants in the writable data segment and don't uniquize
them. This is for compatibility with old programs which assume they can
--- 1125,1152 ----
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\-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\-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\-fwritable\-strings\fR" 4
.IX Item "-fwritable-strings"
Store string constants in the writable data segment and don't uniquize
them. This is for compatibility with old programs which assume they can
*************** might compile a file \f(CW\*(C`firstClas
*** 1173,1184 ****
.Vb 1
\& g++ -g -frepo -O -c firstClass.C
.Ve
In this example, only \fB\-frepo\fR is an option meant
only for \*(C+ programs; you can use the other options with any
language supported by \s-1GCC\s0.
.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. Version 1 is the version of the \*(C+
\&\s-1ABI\s0 that first appeared in G++ 3.2. Version 0 will always be the
--- 1164,1176 ----
.Vb 1
\& g++ -g -frepo -O -c firstClass.C
.Ve
+ .PP
In this example, only \fB\-frepo\fR is an option meant
only for \*(C+ programs; you can use the other options with any
language supported by \s-1GCC\s0.
.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. Version 1 is the version of the \*(C+
\&\s-1ABI\s0 that first appeared in G++ 3.2. Version 0 will always be the
*************** Therefore, the \s-1ABI\s0 obtained using
*** 1187,1208 ****
fixed.
.Sp
The default is version 1.
! .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\-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 will only return \f(CW\*(C`0\*(C'\fR if it is declared
\&\fB\f(BIthrow()\fB\fR, in which case the compiler will always check 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\-fconserve-space\fR" 4
.IX Item "-fconserve-space"
Put uninitialized or runtime-initialized global variables into the
common segment, as C does. This saves space in the executable at the
--- 1179,1200 ----
fixed.
.Sp
The default is version 1.
! .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\-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 will only return \f(CW0\fR if it is declared
\&\fB\f(BIthrow()\fB\fR, in which case the compiler will always check 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\-fconserve\-space\fR" 4
.IX Item "-fconserve-space"
Put uninitialized or runtime-initialized global variables into the
common segment, as C does. This saves space in the executable at the
*************** two definitions were merged.
*** 1213,1271 ****
.Sp
This option is no longer useful on most targets, now that support has
been added for putting variables into \s-1BSS\s0 without making them common.
! .Ip "\fB\-fno-const-strings\fR" 4
.IX Item "-fno-const-strings"
Give string constants type \f(CW\*(C`char *\*(C'\fR instead of type \f(CW\*(C`const
char *\*(C'\fR. By default, G++ uses type \f(CW\*(C`const char *\*(C'\fR as required by
! the standard. Even if you use \fB\-fno-const-strings\fR, you cannot
actually modify the value of a string constant, unless you also use
! \&\fB\-fwritable-strings\fR.
.Sp
This option might be removed in a future release of G++. For maximum
portability, you should structure your code so that it works with
string constants that have type \f(CW\*(C`const char *\*(C'\fR.
! .Ip "\fB\-fdollars-in-identifiers\fR" 4
.IX Item "-fdollars-in-identifiers"
Accept \fB$\fR in identifiers. You can also explicitly prohibit use of
! \&\fB$\fR with the option \fB\-fno-dollars-in-identifiers\fR. (\s-1GNU\s0 C allows
\&\fB$\fR by default on most target systems, but there are a few exceptions.)
Traditional C allowed the character \fB$\fR to form part of
identifiers. However, \s-1ISO\s0 C and \*(C+ forbid \fB$\fR in identifiers.
! .Ip "\fB\-fno-elide-constructors\fR" 4
.IX Item "-fno-elide-constructors"
The \*(C+ standard allows an implementation to omit creating a temporary
which 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.
! .Ip "\fB\-fno-enforce-eh-specs\fR" 4
.IX Item "-fno-enforce-eh-specs"
Don't check for violation of exception specifications at runtime. This
option violates the \*(C+ standard, but may be useful for reducing code
size in production builds, much like defining \fB\s-1NDEBUG\s0\fR. The compiler
will still optimize based on the exception specifications.
! .Ip "\fB\-fexternal-templates\fR" 4
.IX Item "-fexternal-templates"
Cause \fB#pragma interface\fR and \fBimplementation\fR to apply to
template instantiation; template instances are emitted or not according
to the location of the template definition.
.Sp
This option is deprecated.
! .Ip "\fB\-falt-external-templates\fR" 4
.IX Item "-falt-external-templates"
! Similar to \fB\-fexternal-templates\fR, but template instances are
emitted or not according to the place where they are first instantiated.
.Sp
This option is deprecated.
! .Ip "\fB\-ffor-scope\fR" 4
.IX Item "-ffor-scope"
.PD 0
! .Ip "\fB\-fno-for-scope\fR" 4
.IX Item "-fno-for-scope"
.PD
! If \fB\-ffor-scope\fR is specified, the scope of variables declared in
a \fIfor-init-statement\fR is limited to the \fBfor\fR loop itself,
as specified by the \*(C+ standard.
! If \fB\-fno-for-scope\fR is specified, the scope of variables declared in
a \fIfor-init-statement\fR extends to the end of the enclosing scope,
as was the case in old versions of G++, and other (traditional)
implementations of \*(C+.
--- 1205,1263 ----
.Sp
This option is no longer useful on most targets, now that support has
been added for putting variables into \s-1BSS\s0 without making them common.
! .IP "\fB\-fno\-const\-strings\fR" 4
.IX Item "-fno-const-strings"
Give string constants type \f(CW\*(C`char *\*(C'\fR instead of type \f(CW\*(C`const
char *\*(C'\fR. By default, G++ uses type \f(CW\*(C`const char *\*(C'\fR as required by
! the standard. Even if you use \fB\-fno\-const\-strings\fR, you cannot
actually modify the value of a string constant, unless you also use
! \&\fB\-fwritable\-strings\fR.
.Sp
This option might be removed in a future release of G++. For maximum
portability, you should structure your code so that it works with
string constants that have type \f(CW\*(C`const char *\*(C'\fR.
! .IP "\fB\-fdollars\-in\-identifiers\fR" 4
.IX Item "-fdollars-in-identifiers"
Accept \fB$\fR in identifiers. You can also explicitly prohibit use of
! \&\fB$\fR with the option \fB\-fno\-dollars\-in\-identifiers\fR. (\s-1GNU\s0 C allows
\&\fB$\fR by default on most target systems, but there are a few exceptions.)
Traditional C allowed the character \fB$\fR to form part of
identifiers. However, \s-1ISO\s0 C and \*(C+ forbid \fB$\fR in identifiers.
! .IP "\fB\-fno\-elide\-constructors\fR" 4
.IX Item "-fno-elide-constructors"
The \*(C+ standard allows an implementation to omit creating a temporary
which 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.
! .IP "\fB\-fno\-enforce\-eh\-specs\fR" 4
.IX Item "-fno-enforce-eh-specs"
Don't check for violation of exception specifications at runtime. This
option violates the \*(C+ standard, but may be useful for reducing code
size in production builds, much like defining \fB\s-1NDEBUG\s0\fR. The compiler
will still optimize based on the exception specifications.
! .IP "\fB\-fexternal\-templates\fR" 4
.IX Item "-fexternal-templates"
Cause \fB#pragma interface\fR and \fBimplementation\fR to apply to
template instantiation; template instances are emitted or not according
to the location of the template definition.
.Sp
This option is deprecated.
! .IP "\fB\-falt\-external\-templates\fR" 4
.IX Item "-falt-external-templates"
! Similar to \fB\-fexternal\-templates\fR, but template instances are
emitted or not according to the place where they are first instantiated.
.Sp
This option is deprecated.
! .IP "\fB\-ffor\-scope\fR" 4
.IX Item "-ffor-scope"
.PD 0
! .IP "\fB\-fno\-for\-scope\fR" 4
.IX Item "-fno-for-scope"
.PD
! If \fB\-ffor\-scope\fR is specified, the scope of variables declared in
a \fIfor-init-statement\fR is limited to the \fBfor\fR loop itself,
as specified by the \*(C+ standard.
! If \fB\-fno\-for\-scope\fR is specified, the scope of variables declared in
a \fIfor-init-statement\fR extends to the end of the enclosing scope,
as was the case in old versions of G++, and other (traditional)
implementations of \*(C+.
*************** implementations of \*(C+.
*** 1273,1326 ****
The default if neither flag is given to follow the standard,
but to allow and give a warning for old-style code that would
otherwise be invalid, or have different behavior.
! .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.
! \&\fB\-ansi\fR implies \fB\-fno-gnu-keywords\fR.
! .Ip "\fB\-fno-implicit-templates\fR" 4
.IX Item "-fno-implicit-templates"
Never emit code for non-inline templates which are instantiated
implicitly (i.e. by use); only emit code for explicit instantiations.
! .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 will 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 \fB#pragma implementation\fR. This will cause linker
errors if these functions are not inlined everywhere they are called.
! .Ip "\fB\-fms-extensions\fR" 4
.IX Item "-fms-extensions"
Disable pedantic 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\-fno-nonansi-builtins\fR" 4
.IX Item "-fno-nonansi-builtins"
Disable built-in declarations of functions that are not mandated by
\&\s-1ANSI/ISO\s0 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\-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\-fpermissive\fR" 4
.IX Item "-fpermissive"
Downgrade some diagnostics about nonconformant code from errors to
warnings. Thus, using \fB\-fpermissive\fR will allow some
nonconforming code to compile.
! .Ip "\fB\-frepo\fR" 4
.IX Item "-frepo"
Enable automatic template instantiation at link time. This option also
! implies \fB\-fno-implicit-templates\fR.
! .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+ runtime type identification features
--- 1265,1318 ----
The default if neither flag is given to follow the standard,
but to allow and give a warning for old-style code that would
otherwise be invalid, or have different behavior.
! .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.
! \&\fB\-ansi\fR implies \fB\-fno\-gnu\-keywords\fR.
! .IP "\fB\-fno\-implicit\-templates\fR" 4
.IX Item "-fno-implicit-templates"
Never emit code for non-inline templates which are instantiated
implicitly (i.e. by use); only emit code for explicit instantiations.
! .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 will 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 \fB#pragma implementation\fR. This will cause linker
errors if these functions are not inlined everywhere they are called.
! .IP "\fB\-fms\-extensions\fR" 4
.IX Item "-fms-extensions"
Disable pedantic 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\-fno\-nonansi\-builtins\fR" 4
.IX Item "-fno-nonansi-builtins"
Disable built-in declarations of functions that are not mandated by
\&\s-1ANSI/ISO\s0 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\-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\-fpermissive\fR" 4
.IX Item "-fpermissive"
Downgrade some diagnostics about nonconformant code from errors to
warnings. Thus, using \fB\-fpermissive\fR will allow some
nonconforming code to compile.
! .IP "\fB\-frepo\fR" 4
.IX Item "-frepo"
Enable automatic template instantiation at link time. This option also
! implies \fB\-fno\-implicit\-templates\fR.
! .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+ runtime type identification features
*************** functions for use by the \*(C+ runtime t
*** 1328,1368 ****
of the language, you can save some space by using this flag. Note that
exception handling uses the same information, but it will generate it as
needed.
! .Ip "\fB\-fstats\fR" 4
.IX Item "-fstats"
Emit statistics about front-end processing at the end of the compilation.
This information is generally only useful to the G++ development team.
! .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\s0 \*(C+
conforming programs must not rely on a maximum depth greater than 17.
! .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 will only work if your C library supports
\&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR.
! .Ip "\fB\-fvtable-gc\fR" 4
.IX Item "-fvtable-gc"
Emit special relocations for vtables and virtual function references
so that the linker can identify unused virtual functions and zero out
vtable slots that refer to them. This is most useful with
! \&\fB\-ffunction-sections\fR and \fB\-Wl,\-\-gc-sections\fR, in order to
also discard the functions themselves.
.Sp
This optimization requires \s-1GNU\s0 as and \s-1GNU\s0 ld. Not all systems support
! this option. \fB\-Wl,\-\-gc-sections\fR is ignored without \fB\-static\fR.
! .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++ will use weak symbols if they are available. This
! option exists only for testing, and should not be used by end-users;
it will result in inferior code and has no benefits. This option may
be removed in a future release of G++.
! .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
--- 1320,1360 ----
of the language, you can save some space by using this flag. Note that
exception handling uses the same information, but it will generate it as
needed.
! .IP "\fB\-fstats\fR" 4
.IX Item "-fstats"
Emit statistics about front-end processing at the end of the compilation.
This information is generally only useful to the G++ development team.
! .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\s0 \*(C+
conforming programs must not rely on a maximum depth greater than 17.
! .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 will only work if your C library supports
\&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR.
! .IP "\fB\-fvtable\-gc\fR" 4
.IX Item "-fvtable-gc"
Emit special relocations for vtables and virtual function references
so that the linker can identify unused virtual functions and zero out
vtable slots that refer to them. This is most useful with
! \&\fB\-ffunction\-sections\fR and \fB\-Wl,\-\-gc\-sections\fR, in order to
also discard the functions themselves.
.Sp
This optimization requires \s-1GNU\s0 as and \s-1GNU\s0 ld. Not all systems support
! this option. \fB\-Wl,\-\-gc\-sections\fR is ignored without \fB\-static\fR.
! .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++ will use weak symbols if they are available. This
! option exists only for testing, and should not be used by end\-users;
it will result in inferior code and has no benefits. This option may
be removed in a future release of G++.
! .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.
*** 1370,1382 ****
.PP
In addition, these optimization, warning, and code generation options
have meanings only for \*(C+ programs:
! .Ip "\fB\-fno-default-inline\fR" 4
.IX Item "-fno-default-inline"
Do not assume \fBinline\fR for functions defined inside a class scope.
Note that these
functions will have linkage like inline functions; they just won't be
inlined by default.
! .Ip "\fB\-Wabi\fR (\*(C+ only)" 4
.IX Item "-Wabi ( only)"
Warn when G++ generates code that is probably not compatible with the
vendor-neutral \*(C+ \s-1ABI\s0. Although an effort has been made to warn about
--- 1362,1374 ----
.PP
In addition, these optimization, warning, and code generation options
have meanings only for \*(C+ programs:
! .IP "\fB\-fno\-default\-inline\fR" 4
.IX Item "-fno-default-inline"
Do not assume \fBinline\fR for functions defined inside a class scope.
Note that these
functions will have linkage like inline functions; they just won't be
inlined by default.
! .IP "\fB\-Wabi\fR (\*(C+ only)" 4
.IX Item "-Wabi ( only)"
Warn when G++ generates code that is probably not compatible with the
vendor-neutral \*(C+ \s-1ABI\s0. Although an effort has been made to warn about
*************** compatible with code generated by other
*** 1391,1410 ****
.Sp
The known incompatibilities at this point include:
.RS 4
! .Ip "\(bu" 4
! Incorrect handling of tail-padding for bit-fields. G++ may attempt to
pack data into the same byte as a base class. For example:
.Sp
.Vb 2
\& struct A { virtual void f(); int f1 : 1; };
\& struct B : public A { int f2 : 1; };
.Ve
In this case, G++ will place \f(CW\*(C`B::f2\*(C'\fR into the same byte
as\f(CW\*(C`A::f1\*(C'\fR; other compilers will not. You can avoid this problem
by explicitly padding \f(CW\*(C`A\*(C'\fR so that its size is a multiple of the
byte size on your platform; that will cause G++ and other compilers to
layout \f(CW\*(C`B\*(C'\fR identically.
! .Ip "\(bu" 4
Incorrect handling of tail-padding for virtual bases. G++ does not use
tail padding when laying out virtual bases. For example:
.Sp
--- 1383,1403 ----
.Sp
The known incompatibilities at this point include:
.RS 4
! .IP "*" 4
! Incorrect handling of tail-padding for bit\-fields. G++ may attempt to
pack data into the same byte as a base class. For example:
.Sp
.Vb 2
\& struct A { virtual void f(); int f1 : 1; };
\& struct B : public A { int f2 : 1; };
.Ve
+ .Sp
In this case, G++ will place \f(CW\*(C`B::f2\*(C'\fR into the same byte
as\f(CW\*(C`A::f1\*(C'\fR; other compilers will not. You can avoid this problem
by explicitly padding \f(CW\*(C`A\*(C'\fR so that its size is a multiple of the
byte size on your platform; that will cause G++ and other compilers to
layout \f(CW\*(C`B\*(C'\fR identically.
! .IP "*" 4
Incorrect handling of tail-padding for virtual bases. G++ does not use
tail padding when laying out virtual bases. For example:
.Sp
*************** tail padding when laying out virtual bas
*** 1413,1424 ****
\& struct B { B(); char c2; };
\& struct C : public A, public virtual B {};
.Ve
In this case, G++ will not place \f(CW\*(C`B\*(C'\fR into the tail-padding for
\&\f(CW\*(C`A\*(C'\fR; other compilers will. You can avoid this problem by
explicitly padding \f(CW\*(C`A\*(C'\fR so that its size is a multiple of its
alignment (ignoring virtual base classes); that will cause G++ and other
compilers to layout \f(CW\*(C`C\*(C'\fR identically.
! .Ip "\(bu" 4
Incorrect handling of bit-fields with declared widths greater than that
of their underlying types, when the bit-fields appear in a union. For
example:
--- 1406,1418 ----
\& struct B { B(); char c2; };
\& struct C : public A, public virtual B {};
.Ve
+ .Sp
In this case, G++ will not place \f(CW\*(C`B\*(C'\fR into the tail-padding for
\&\f(CW\*(C`A\*(C'\fR; other compilers will. You can avoid this problem by
explicitly padding \f(CW\*(C`A\*(C'\fR so that its size is a multiple of its
alignment (ignoring virtual base classes); that will cause G++ and other
compilers to layout \f(CW\*(C`C\*(C'\fR identically.
! .IP "*" 4
Incorrect handling of bit-fields with declared widths greater than that
of their underlying types, when the bit-fields appear in a union. For
example:
*************** example:
*** 1426,1452 ****
.Vb 1
\& union U { int i : 4096; };
.Ve
Assuming that an \f(CW\*(C`int\*(C'\fR does not have 4096 bits, G++ will make the
union too small by the number of bits in an \f(CW\*(C`int\*(C'\fR.
! .Ip "\(bu" 4
Empty classes can be placed at incorrect offsets. For example:
.Sp
.Vb 1
\& struct A {};
.Ve
.Vb 4
\& struct B {
\& A a;
\& virtual void f ();
\& };
.Ve
.Vb 1
\& struct C : public B, public A {};
.Ve
G++ will place the \f(CW\*(C`A\*(C'\fR base class of \f(CW\*(C`C\*(C'\fR at a nonzero offset;
it should be placed at offset zero. G++ mistakenly believes that the
\&\f(CW\*(C`A\*(C'\fR data member of \f(CW\*(C`B\*(C'\fR is already at offset zero.
! .Ip "\(bu" 4
Names of template functions whose types involve \f(CW\*(C`typename\*(C'\fR or
template template parameters can be mangled incorrectly.
.Sp
--- 1420,1450 ----
.Vb 1
\& union U { int i : 4096; };
.Ve
+ .Sp
Assuming that an \f(CW\*(C`int\*(C'\fR does not have 4096 bits, G++ will make the
union too small by the number of bits in an \f(CW\*(C`int\*(C'\fR.
! .IP "*" 4
Empty classes can be placed at incorrect offsets. For example:
.Sp
.Vb 1
\& struct A {};
.Ve
+ .Sp
.Vb 4
\& struct B {
\& A a;
\& virtual void f ();
\& };
.Ve
+ .Sp
.Vb 1
\& struct C : public B, public A {};
.Ve
+ .Sp
G++ will place the \f(CW\*(C`A\*(C'\fR base class of \f(CW\*(C`C\*(C'\fR at a nonzero offset;
it should be placed at offset zero. G++ mistakenly believes that the
\&\f(CW\*(C`A\*(C'\fR data member of \f(CW\*(C`B\*(C'\fR is already at offset zero.
! .IP "*" 4
Names of template functions whose types involve \f(CW\*(C`typename\*(C'\fR or
template template parameters can be mangled incorrectly.
.Sp
*************** template template parameters can be mang
*** 1454,1478 ****
\& template
\& void f(typename Q::X) {}
.Ve
.Vb 2
\& template class Q>
\& void f(typename Q::X) {}
.Ve
Instantiations of these templates may be mangled incorrectly.
.RE
.RS 4
.RE
! .Ip "\fB\-Wctor-dtor-privacy\fR (\*(C+ only)" 4
.IX Item "-Wctor-dtor-privacy ( 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. This warning is enabled by default.
! .Ip "\fB\-Wnon-virtual-dtor\fR (\*(C+ only)" 4
.IX Item "-Wnon-virtual-dtor ( only)"
Warn when a class appears to be polymorphic, thereby requiring a virtual
destructor, yet it declares a non-virtual one.
This warning is enabled by \fB\-Wall\fR.
! .Ip "\fB\-Wreorder\fR (\*(C+ only)" 4
.IX Item "-Wreorder ( 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:
--- 1452,1478 ----
\& template
\& void f(typename Q::X) {}
.Ve
+ .Sp
.Vb 2
\& template class Q>
\& void f(typename Q::X) {}
.Ve
+ .Sp
Instantiations of these templates may be mangled incorrectly.
.RE
.RS 4
.RE
! .IP "\fB\-Wctor\-dtor\-privacy\fR (\*(C+ only)" 4
.IX Item "-Wctor-dtor-privacy ( 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. This warning is enabled by default.
! .IP "\fB\-Wnon\-virtual\-dtor\fR (\*(C+ only)" 4
.IX Item "-Wnon-virtual-dtor ( only)"
Warn when a class appears to be polymorphic, thereby requiring a virtual
destructor, yet it declares a non-virtual one.
This warning is enabled by \fB\-Wall\fR.
! .IP "\fB\-Wreorder\fR (\*(C+ only)" 4
.IX Item "-Wreorder ( 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:
*************** match the order in which they must be ex
*** 1484,1521 ****
\& A(): j (0), i (1) { }
\& };
.Ve
The compiler will rearrange the member initializers for \fBi\fR
and \fBj\fR to match the declaration order of the members, emitting
a warning to that effect. This warning is enabled by \fB\-Wall\fR.
.PP
The following \fB\-W...\fR options are not affected by \fB\-Wall\fR.
! .Ip "\fB\-Weffc++\fR (\*(C+ only)" 4
.IX Item "-Weffc++ ( only)"
Warn about violations of the following style guidelines from Scott Meyers'
\&\fIEffective \*(C+\fR book:
.RS 4
! .Ip "\(bu" 4
Item 11: Define a copy constructor and an assignment operator for classes
with dynamically allocated memory.
! .Ip "\(bu" 4
Item 12: Prefer initialization to assignment in constructors.
! .Ip "\(bu" 4
Item 14: Make destructors virtual in base classes.
! .Ip "\(bu" 4
! Item 15: Have \f(CW\*(C`operator=\*(C'\fR return a reference to \f(CW\*(C`*this\*(C'\fR.
! .Ip "\(bu" 4
Item 23: Don't try to return a reference when you must return an object.
.RE
.RS 4
.Sp
Also warn about violations of the following style guidelines from
Scott Meyers' \fIMore Effective \*(C+\fR book:
! .RS 4
! .RE
! .Ip "\(bu" 4
Item 6: Distinguish between prefix and postfix forms of increment and
decrement operators.
! .Ip "\(bu" 4
Item 7: Never overload \f(CW\*(C`&&\*(C'\fR, \f(CW\*(C`||\*(C'\fR, or \f(CW\*(C`,\*(C'\fR.
.RE
.RS 4
--- 1484,1520 ----
\& A(): j (0), i (1) { }
\& };
.Ve
+ .Sp
The compiler will rearrange the member initializers for \fBi\fR
and \fBj\fR to match the declaration order of the members, emitting
a warning to that effect. This warning is enabled by \fB\-Wall\fR.
.PP
The following \fB\-W...\fR options are not affected by \fB\-Wall\fR.
! .IP "\fB\-Weffc++\fR (\*(C+ only)" 4
.IX Item "-Weffc++ ( only)"
Warn about violations of the following style guidelines from Scott Meyers'
\&\fIEffective \*(C+\fR book:
.RS 4
! .IP "*" 4
Item 11: Define a copy constructor and an assignment operator for classes
with dynamically allocated memory.
! .IP "*" 4
Item 12: Prefer initialization to assignment in constructors.
! .IP "*" 4
Item 14: Make destructors virtual in base classes.
! .IP "*" 4
! Item 15: Have \f(CW\*(C`operator=\*(C'\fR return a reference to \f(CW*this\fR.
! .IP "*" 4
Item 23: Don't try to return a reference when you must return an object.
.RE
.RS 4
.Sp
Also warn about violations of the following style guidelines from
Scott Meyers' \fIMore Effective \*(C+\fR book:
! .IP "*" 4
Item 6: Distinguish between prefix and postfix forms of increment and
decrement operators.
! .IP "*" 4
Item 7: Never overload \f(CW\*(C`&&\*(C'\fR, \f(CW\*(C`||\*(C'\fR, or \f(CW\*(C`,\*(C'\fR.
.RE
.RS 4
*************** When selecting this option, be aware tha
*** 1524,1533 ****
headers do not obey all of these guidelines; use \fBgrep \-v\fR
to filter out those warnings.
.RE
! .Ip "\fB\-Wno-deprecated\fR (\*(C+ only)" 4
.IX Item "-Wno-deprecated ( only)"
Do not warn about usage of deprecated features.
! .Ip "\fB\-Wno-non-template-friend\fR (\*(C+ only)" 4
.IX Item "-Wno-non-template-friend ( only)"
Disable warnings when non-templatized friend functions are declared
within a template. Since the advent of explicit template specification
--- 1523,1532 ----
headers do not obey all of these guidelines; use \fBgrep \-v\fR
to filter out those warnings.
.RE
! .IP "\fB\-Wno\-deprecated\fR (\*(C+ only)" 4
.IX Item "-Wno-deprecated ( only)"
Do not warn about usage of deprecated features.
! .IP "\fB\-Wno\-non\-template\-friend\fR (\*(C+ only)" 4
.IX Item "-Wno-non-template-friend ( only)"
Disable warnings when non-templatized friend functions are declared
within a template. Since the advent of explicit template specification
*************** friend declare or define an ordinary, no
*** 1537,1554 ****
14.5.3). Before G++ implemented explicit specification, unqualified-ids
could be interpreted as a particular specialization of a templatized
function. Because this non-conforming behavior is no longer the default
! behavior for G++, \fB\-Wnon-template-friend\fR allows the compiler to
check existing code for potential trouble spots and is on by default.
This new compiler behavior can be turned off with
! \&\fB\-Wno-non-template-friend\fR which keeps the conformant compiler code
but disables the helpful warning.
! .Ip "\fB\-Wold-style-cast\fR (\*(C+ only)" 4
.IX Item "-Wold-style-cast ( only)"
! Warn if an old-style (C-style) cast to a non-void type is used within
a \*(C+ program. The new-style casts (\fBstatic_cast\fR,
\&\fBreinterpret_cast\fR, and \fBconst_cast\fR) are less vulnerable to
unintended effects and much easier to search for.
! .Ip "\fB\-Woverloaded-virtual\fR (\*(C+ only)" 4
.IX Item "-Woverloaded-virtual ( only)"
Warn when a function declaration hides virtual functions from a
base class. For example, in:
--- 1536,1553 ----
14.5.3). Before G++ implemented explicit specification, unqualified-ids
could be interpreted as a particular specialization of a templatized
function. Because this non-conforming behavior is no longer the default
! behavior for G++, \fB\-Wnon\-template\-friend\fR allows the compiler to
check existing code for potential trouble spots and is on by default.
This new compiler behavior can be turned off with
! \&\fB\-Wno\-non\-template\-friend\fR which keeps the conformant compiler code
but disables the helpful warning.
! .IP "\fB\-Wold\-style\-cast\fR (\*(C+ only)" 4
.IX Item "-Wold-style-cast ( only)"
! Warn if an old-style (C\-style) cast to a non-void type is used within
a \*(C+ program. The new-style casts (\fBstatic_cast\fR,
\&\fBreinterpret_cast\fR, and \fBconst_cast\fR) are less vulnerable to
unintended effects and much easier to search for.
! .IP "\fB\-Woverloaded\-virtual\fR (\*(C+ only)" 4
.IX Item "-Woverloaded-virtual ( only)"
Warn when a function declaration hides virtual functions from a
base class. For example, in:
*************** base class. For example, in:
*** 1558,1568 ****
--- 1557,1569 ----
\& virtual void f();
\& };
.Ve
+ .Sp
.Vb 3
\& struct B: public A {
\& void f(int);
\& };
.Ve
+ .Sp
the \f(CW\*(C`A\*(C'\fR class version of \f(CW\*(C`f\*(C'\fR is hidden in \f(CW\*(C`B\*(C'\fR, and code
like:
.Sp
*************** like:
*** 1570,1587 ****
\& B* b;
\& b->f();
.Ve
will fail to compile.
! .Ip "\fB\-Wno-pmf-conversions\fR (\*(C+ only)" 4
.IX Item "-Wno-pmf-conversions ( only)"
Disable the diagnostic for converting a bound pointer to member function
to a plain pointer.
! .Ip "\fB\-Wsign-promo\fR (\*(C+ only)" 4
.IX Item "-Wsign-promo ( only)"
Warn when overload resolution chooses a promotion from unsigned or
enumeral type to a signed type, over a conversion to an unsigned type of
the same size. Previous versions of G++ would try to preserve
unsignedness, but the standard mandates the current behavior.
! .Ip "\fB\-Wsynth\fR (\*(C+ only)" 4
.IX Item "-Wsynth ( only)"
Warn when G++'s synthesis behavior does not match that of cfront. For
instance:
--- 1571,1589 ----
\& B* b;
\& b->f();
.Ve
+ .Sp
will fail to compile.
! .IP "\fB\-Wno\-pmf\-conversions\fR (\*(C+ only)" 4
.IX Item "-Wno-pmf-conversions ( only)"
Disable the diagnostic for converting a bound pointer to member function
to a plain pointer.
! .IP "\fB\-Wsign\-promo\fR (\*(C+ only)" 4
.IX Item "-Wsign-promo ( only)"
Warn when overload resolution chooses a promotion from unsigned or
enumeral type to a signed type, over a conversion to an unsigned type of
the same size. Previous versions of G++ would try to preserve
unsignedness, but the standard mandates the current behavior.
! .IP "\fB\-Wsynth\fR (\*(C+ only)" 4
.IX Item "-Wsynth ( only)"
Warn when G++'s synthesis behavior does not match that of cfront. For
instance:
*************** instance:
*** 1592,1597 ****
--- 1594,1600 ----
\& A& operator = (int);
\& };
.Ve
+ .Sp
.Vb 5
\& main ()
\& {
*************** instance:
*** 1599,1604 ****
--- 1602,1608 ----
\& a = b;
\& }
.Ve
+ .Sp
In this example, G++ will synthesize a default \fBA& operator =
(const A&);\fR, while cfront will use the user-defined \fBoperator =\fR.
.Sh "Options Controlling Objective-C Dialect"
*************** you might compile a file \f(CW\*(C`some_
*** 1611,1642 ****
.Vb 1
\& gcc -g -fgnu-runtime -O -c some_class.m
.Ve
! In this example, \fB\-fgnu-runtime\fR is an option meant only for
Objective-C programs; you can use the other options with any language
supported by \s-1GCC\s0.
.PP
Here is a list of options that are \fIonly\fR for compiling 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.
! .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 and Mac \s-1OS\s0 X. The macro
\&\f(CW\*(C`_\|_NEXT_RUNTIME_\|_\*(C'\fR is predefined if (and only if) this option is
used.
! .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\-Wno-protocol\fR" 4
.IX Item "-Wno-protocol"
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
--- 1615,1647 ----
.Vb 1
\& gcc -g -fgnu-runtime -O -c some_class.m
.Ve
! .PP
! In this example, \fB\-fgnu\-runtime\fR is an option meant only for
Objective-C programs; you can use the other options with any language
supported by \s-1GCC\s0.
.PP
Here is a list of options that are \fIonly\fR for compiling 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.
! .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 and Mac \s-1OS\s0 X. The macro
\&\f(CW\*(C`_\|_NEXT_RUNTIME_\|_\*(C'\fR is predefined if (and only if) this option is
used.
! .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\-Wno\-protocol\fR" 4
.IX Item "-Wno-protocol"
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
*************** implemented in the class, even if a meth
*** 1645,1651 ****
from the superclass. If you use the \f(CW\*(C`\-Wno\-protocol\*(C'\fR option, then
methods inherited from the superclass are considered to be implemented,
and no warning is issued for them.
! .Ip "\fB\-Wselector\fR" 4
.IX Item "-Wselector"
Warn if multiple methods of different types for the same selector are
found during compilation. The check is performed on the list of methods
--- 1650,1656 ----
from the superclass. If you use the \f(CW\*(C`\-Wno\-protocol\*(C'\fR option, then
methods inherited from the superclass are considered to be implemented,
and no warning is issued for them.
! .IP "\fB\-Wselector\fR" 4
.IX Item "-Wselector"
Warn if multiple methods of different types for the same selector are
found during compilation. The check is performed on the list of methods
*************** the end of compilation, these warnings a
*** 1657,1670 ****
stage of compilation is not reached, for example because an error is
found during compilation, or because the \f(CW\*(C`\-fsyntax\-only\*(C'\fR option is
being used.
! .Ip "\fB\-Wundeclared-selector\fR" 4
.IX Item "-Wundeclared-selector"
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\*(C`@interface\*(C'\fR or \f(CW\*(C`@protocol\*(C'\fR declaration, or implicitly in
! an \f(CW\*(C`@implementation\*(C'\fR section. This option always performs its
checks as soon as a \f(CW\*(C`@selector(...)\*(C'\fR expression is found,
while \f(CW\*(C`\-Wselector\*(C'\fR only performs its checks in the final stage of
compilation. This also enforces the coding style convention
--- 1662,1675 ----
stage of compilation is not reached, for example because an error is
found during compilation, or because the \f(CW\*(C`\-fsyntax\-only\*(C'\fR option is
being used.
! .IP "\fB\-Wundeclared\-selector\fR" 4
.IX Item "-Wundeclared-selector"
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 \f(CW\*(C`\-Wselector\*(C'\fR only performs its checks in the final stage of
compilation. This also enforces the coding style convention
*************** algorithm, e.g. how many characters per
*** 1678,1691 ****
information should be reported. Right now, only the \*(C+ front end can
honor these options. However it is expected, in the near future, that
the remaining front ends would be able to digest them correctly.
! .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. The default is 72 characters for \fBg++\fR and 0 for the rest of
the front ends supported by \s-1GCC\s0. If \fIn\fR is zero, then no
line-wrapping will be done; each error message will appear on a single
line.
! .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 \fIonce\fR source location information; that is, in
--- 1683,1696 ----
information should be reported. Right now, only the \*(C+ front end can
honor these options. However it is expected, in the near future, that
the remaining front ends would be able to digest them correctly.
! .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. The default is 72 characters for \fBg++\fR and 0 for the rest of
the front ends supported by \s-1GCC\s0. If \fIn\fR is zero, then no
line-wrapping will be done; each error message will appear on a single
line.
! .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 \fIonce\fR source location information; that is, in
*************** case the message is too long to fit on a
*** 1693,1699 ****
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
--- 1698,1704 ----
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
*************** may have been an error.
*** 1708,1724 ****
You can request many specific warnings with options beginning \fB\-W\fR,
for example \fB\-Wimplicit\fR to request warnings on implicit
declarations. Each of these specific warning options also 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.
.PP
The following options control the amount and kinds of warnings produced
by \s-1GCC\s0; for further, language-specific options also refer to
! \&\f(CW@ref\fR{\*(C+ Dialect Options} and \f(CW@ref\fR{Objective-C Dialect Options}.
! .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\-pedantic\fR" 4
.IX Item "-pedantic"
Issue all the warnings demanded by strict \s-1ISO\s0 C and \s-1ISO\s0 \*(C+;
reject all programs that use forbidden extensions, and some other
--- 1713,1729 ----
You can request many specific warnings with options beginning \fB\-W\fR,
for example \fB\-Wimplicit\fR to request warnings on implicit
declarations. Each of these specific warning options also 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.
.PP
The following options control the amount and kinds of warnings produced
by \s-1GCC\s0; for further, language-specific options also refer to
! \&\fB\*(C+ Dialect Options\fR and \fBObjective-C Dialect Options\fR.
! .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\-pedantic\fR" 4
.IX Item "-pedantic"
Issue all the warnings demanded by strict \s-1ISO\s0 C and \s-1ISO\s0 \*(C+;
reject all programs that use forbidden extensions, and some other
*************** for such warnings to be given only for f
*** 1757,1782 ****
C 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"
Like \fB\-pedantic\fR, except that errors are produced rather than
warnings.
! .Ip "\fB\-w\fR" 4
.IX Item "-w"
Inhibit all warning messages.
! .Ip "\fB\-Wno-import\fR" 4
.IX Item "-Wno-import"
Inhibit warning messages about the use of \fB#import\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.
! .Ip "\fB\-Wcomment\fR" 4
.IX Item "-Wcomment"
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.
! .Ip "\fB\-Wformat\fR" 4
.IX Item "-Wformat"
Check calls to \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`scanf\*(C'\fR, etc., to make sure that
the arguments supplied have types appropriate to the format string
--- 1762,1787 ----
C 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"
Like \fB\-pedantic\fR, except that errors are produced rather than
warnings.
! .IP "\fB\-w\fR" 4
.IX Item "-w"
Inhibit all warning messages.
! .IP "\fB\-Wno\-import\fR" 4
.IX Item "-Wno-import"
Inhibit warning messages about the use of \fB#import\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.
! .IP "\fB\-Wcomment\fR" 4
.IX Item "-Wcomment"
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.
! .IP "\fB\-Wformat\fR" 4
.IX Item "-Wformat"
Check calls to \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`scanf\*(C'\fR, etc., to make sure that
the arguments supplied have types appropriate to the format string
*************** Since \fB\-Wformat\fR also checks for nu
*** 1800,1814 ****
several functions, \fB\-Wformat\fR also implies \fB\-Wnonnull\fR.
.Sp
\&\fB\-Wformat\fR is included in \fB\-Wall\fR. For more control over some
! aspects of format checking, the options \fB\-Wno-format-y2k\fR,
! \&\fB\-Wno-format-extra-args\fR, \fB\-Wno-format-zero-length\fR,
! \&\fB\-Wformat-nonliteral\fR, \fB\-Wformat-security\fR, and
\&\fB\-Wformat=2\fR are available, but are not included in \fB\-Wall\fR.
! .Ip "\fB\-Wno-format-y2k\fR" 4
.IX Item "-Wno-format-y2k"
If \fB\-Wformat\fR is specified, do not warn about \f(CW\*(C`strftime\*(C'\fR
formats which may yield only a two-digit year.
! .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
--- 1805,1819 ----
several functions, \fB\-Wformat\fR also implies \fB\-Wnonnull\fR.
.Sp
\&\fB\-Wformat\fR is included in \fB\-Wall\fR. For more control over some
! aspects of format checking, the options \fB\-Wno\-format\-y2k\fR,
! \&\fB\-Wno\-format\-extra\-args\fR, \fB\-Wno\-format\-zero\-length\fR,
! \&\fB\-Wformat\-nonliteral\fR, \fB\-Wformat\-security\fR, and
\&\fB\-Wformat=2\fR are available, but are not included in \fB\-Wall\fR.
! .IP "\fB\-Wno\-format\-y2k\fR" 4
.IX Item "-Wno-format-y2k"
If \fB\-Wformat\fR is specified, do not warn about \f(CW\*(C`strftime\*(C'\fR
formats which may yield only a two-digit year.
! .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
*** 1821,1836 ****
in the case of \f(CW\*(C`scanf\*(C'\fR formats, this option will suppress the
warning if the unused arguments are all pointers, since the Single
Unix Specification says that such unused arguments are allowed.
! .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
--- 1826,1841 ----
in the case of \f(CW\*(C`scanf\*(C'\fR formats, this option will suppress the
warning if the unused arguments are all pointers, since the Single
Unix Specification says that such unused arguments are allowed.
! .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\*(
*** 1838,1878 ****
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%n\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=2\fR" 4
.IX Item "-Wformat=2"
Enable \fB\-Wformat\fR plus format checks not included in
\&\fB\-Wformat\fR. Currently equivalent to \fB\-Wformat
! \&\-Wformat-nonliteral \-Wformat-security\fR.
! .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\-Wimplicit-int\fR" 4
.IX Item "-Wimplicit-int"
Warn when a declaration does not specify a type.
! .Ip "\fB\-Wimplicit-function-declaration\fR" 4
.IX Item "-Wimplicit-function-declaration"
.PD 0
! .Ip "\fB\-Werror-implicit-function-declaration\fR" 4
.IX Item "-Werror-implicit-function-declaration"
.PD
Give a warning (or error) whenever a function is used before being
declared.
! .Ip "\fB\-Wimplicit\fR" 4
.IX Item "-Wimplicit"
! Same as \fB\-Wimplicit-int\fR and \fB\-Wimplicit-function-declaration\fR.
! .Ip "\fB\-Wmain\fR" 4
.IX Item "-Wmain"
Warn if the type of \fBmain\fR is suspicious. \fBmain\fR should be a
function with external linkage, returning int, taking either zero
arguments, two, or three arguments of appropriate types.
! .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 \fBa\fR is not fully
--- 1843,1883 ----
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%n\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=2\fR" 4
.IX Item "-Wformat=2"
Enable \fB\-Wformat\fR plus format checks not included in
\&\fB\-Wformat\fR. Currently equivalent to \fB\-Wformat
! \&\-Wformat\-nonliteral \-Wformat\-security\fR.
! .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\-Wimplicit\-int\fR" 4
.IX Item "-Wimplicit-int"
Warn when a declaration does not specify a type.
! .IP "\fB\-Wimplicit\-function\-declaration\fR" 4
.IX Item "-Wimplicit-function-declaration"
.PD 0
! .IP "\fB\-Werror\-implicit\-function\-declaration\fR" 4
.IX Item "-Werror-implicit-function-declaration"
.PD
Give a warning (or error) whenever a function is used before being
declared.
! .IP "\fB\-Wimplicit\fR" 4
.IX Item "-Wimplicit"
! Same as \fB\-Wimplicit\-int\fR and \fB\-Wimplicit\-function\-declaration\fR.
! .IP "\fB\-Wmain\fR" 4
.IX Item "-Wmain"
Warn if the type of \fBmain\fR is suspicious. \fBmain\fR should be a
function with external linkage, returning int, taking either zero
arguments, two, or three arguments of appropriate types.
! .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 \fBa\fR is not fully
*************** bracketed, but that for \fBb\fR is fully
*** 1882,1888 ****
\& int a[2][2] = { 0, 1, 2, 3 };
\& int b[2][2] = { { 0, 1 }, { 2, 3 } };
.Ve
! .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
--- 1887,1893 ----
\& int a[2][2] = { 0, 1, 2, 3 };
\& int b[2][2] = { { 0, 1 }, { 2, 3 } };
.Ve
! .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
*************** such a case:
*** 1902,1907 ****
--- 1907,1913 ----
\& bar ();
\& }
.Ve
+ .Sp
In 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
*************** the enclosing \f(CW\*(C`if\*(C'\fR. The
*** 1922,1928 ****
\& }
\& }
.Ve
! .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 standard.
--- 1928,1934 ----
\& }
\& }
.Ve
! .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 standard.
*************** over the precise meaning of the sequence
*** 1967,2035 ****
Links to discussions of the problem, including proposed formal
definitions, may be found on our readings page, at
<\fBhttp://gcc.gnu.org/readings.html\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. Also warn about any \f(CW\*(C`return\*(C'\fR statement with no
return-value in a function whose return-type is not \f(CW\*(C`void\*(C'\fR.
.Sp
For \*(C+, a function without return type always produces a diagnostic
! message, even when \fB\-Wno-return-type\fR is specified. The only
exceptions are \fBmain\fR and functions defined in system headers.
! .Ip "\fB\-Wswitch\fR" 4
.IX Item "-Wswitch"
Warn whenever a \f(CW\*(C`switch\*(C'\fR statement has an index of enumeral type
and lacks a \f(CW\*(C`case\*(C'\fR for one or more of the named codes of that
enumeration. (The presence of a \f(CW\*(C`default\*(C'\fR label prevents this
warning.) \f(CW\*(C`case\*(C'\fR labels outside the enumeration range also
provoke warnings when this option is used.
! .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 enumeral type
and lacks a \f(CW\*(C`case\*(C'\fR for one or more of the named codes of that
enumeration. \f(CW\*(C`case\*(C'\fR labels outside the enumeration range also
provoke warnings when this option is used.
! .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).
! .Ip "\fB\-Wunused-function\fR" 4
.IX Item "-Wunused-function"
Warn whenever a static function is declared but not defined or a
! non\e-inline static function is unused.
! .Ip "\fB\-Wunused-label\fR" 4
.IX Item "-Wunused-label"
Warn whenever a label is declared but not used.
.Sp
To suppress this warning use the \fBunused\fR attribute.
! .Ip "\fB\-Wunused-parameter\fR" 4
.IX Item "-Wunused-parameter"
Warn whenever a function parameter is unused aside from its declaration.
.Sp
To suppress this warning use the \fBunused\fR attribute.
! .Ip "\fB\-Wunused-variable\fR" 4
.IX Item "-Wunused-variable"
Warn whenever a local variable or non-constant static variable is unused
aside from its declaration
.Sp
To suppress this warning use the \fBunused\fR attribute.
! .Ip "\fB\-Wunused-value\fR" 4
.IX Item "-Wunused-value"
Warn whenever a statement computes a result that is explicitly not used.
.Sp
To suppress this warning cast the expression to \fBvoid\fR.
! .Ip "\fB\-Wunused\fR" 4
.IX Item "-Wunused"
All the above \fB\-Wunused\fR options combined.
.Sp
In order to get a warning about an unused function parameter, you must
either specify \fB\-W \-Wunused\fR or separately specify
! \&\fB\-Wunused-parameter\fR.
! .Ip "\fB\-Wuninitialized\fR" 4
.IX Item "-Wuninitialized"
Warn if an automatic variable is used without first being initialized or
if a variable may be clobbered by a \f(CW\*(C`setjmp\*(C'\fR call.
--- 1973,2041 ----
Links to discussions of the problem, including proposed formal
definitions, may be found on our readings page, at
<\fBhttp://gcc.gnu.org/readings.html\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. Also warn about any \f(CW\*(C`return\*(C'\fR statement with no
return-value in a function whose return-type is not \f(CW\*(C`void\*(C'\fR.
.Sp
For \*(C+, a function without return type always produces a diagnostic
! message, even when \fB\-Wno\-return\-type\fR is specified. The only
exceptions are \fBmain\fR and functions defined in system headers.
! .IP "\fB\-Wswitch\fR" 4
.IX Item "-Wswitch"
Warn whenever a \f(CW\*(C`switch\*(C'\fR statement has an index of enumeral type
and lacks a \f(CW\*(C`case\*(C'\fR for one or more of the named codes of that
enumeration. (The presence of a \f(CW\*(C`default\*(C'\fR label prevents this
warning.) \f(CW\*(C`case\*(C'\fR labels outside the enumeration range also
provoke warnings when this option is used.
! .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 enumeral type
and lacks a \f(CW\*(C`case\*(C'\fR for one or more of the named codes of that
enumeration. \f(CW\*(C`case\*(C'\fR labels outside the enumeration range also
provoke warnings when this option is used.
! .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).
! .IP "\fB\-Wunused\-function\fR" 4
.IX Item "-Wunused-function"
Warn whenever a static function is declared but not defined or a
! non\e\-inline static function is unused.
! .IP "\fB\-Wunused\-label\fR" 4
.IX Item "-Wunused-label"
Warn whenever a label is declared but not used.
.Sp
To suppress this warning use the \fBunused\fR attribute.
! .IP "\fB\-Wunused\-parameter\fR" 4
.IX Item "-Wunused-parameter"
Warn whenever a function parameter is unused aside from its declaration.
.Sp
To suppress this warning use the \fBunused\fR attribute.
! .IP "\fB\-Wunused\-variable\fR" 4
.IX Item "-Wunused-variable"
Warn whenever a local variable or non-constant static variable is unused
aside from its declaration
.Sp
To suppress this warning use the \fBunused\fR attribute.
! .IP "\fB\-Wunused\-value\fR" 4
.IX Item "-Wunused-value"
Warn whenever a statement computes a result that is explicitly not used.
.Sp
To suppress this warning cast the expression to \fBvoid\fR.
! .IP "\fB\-Wunused\fR" 4
.IX Item "-Wunused"
All the above \fB\-Wunused\fR options combined.
.Sp
In order to get a warning about an unused function parameter, you must
either specify \fB\-W \-Wunused\fR or separately specify
! \&\fB\-Wunused\-parameter\fR.
! .IP "\fB\-Wuninitialized\fR" 4
.IX Item "-Wuninitialized"
Warn if an automatic variable is used without first being initialized or
if a variable may be clobbered by a \f(CW\*(C`setjmp\*(C'\fR call.
*************** this can happen:
*** 2069,2074 ****
--- 2075,2081 ----
\& foo (x);
\& }
.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. Here is
another common case:
*************** another common case:
*** 2081,2086 ****
--- 2088,2094 ----
\& if (change_y) y = save_y;
\& }
.Ve
+ .Sp
This has no bug because \f(CW\*(C`save_y\*(C'\fR is used only if it is set.
.Sp
This option also warns when a non-volatile automatic variable might be
*************** in fact be called at the place which wou
*** 2095,2121 ****
.Sp
Some spurious warnings can be avoided if you declare all the functions
you use that never return as \f(CW\*(C`noreturn\*(C'\fR.
! .Ip "\fB\-Wunknown-pragmas\fR" 4
.IX Item "-Wunknown-pragmas"
Warn when a #pragma directive is encountered which is not understood by
\&\s-1GCC\s0. If this command line option is used, warnings will even be issued
for unknown pragmas in system header files. This is not the case if
the warnings were only enabled by the \fB\-Wall\fR command line option.
! .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 which 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 \fB\-Wall\fR.
! .Ip "\fB\-Wall\fR" 4
.IX Item "-Wall"
All of the above \fB\-W\fR options combined. 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 \f(CW@ref\fR{\*(C+ Dialect Options} and
! \&\f(CW@ref\fR{Objective-C Dialect Options}.
.PP
The following \fB\-W...\fR options are not implied by \fB\-Wall\fR.
Some of them warn about constructions that users generally do not
--- 2103,2129 ----
.Sp
Some spurious warnings can be avoided if you declare all the functions
you use that never return as \f(CW\*(C`noreturn\*(C'\fR.
! .IP "\fB\-Wunknown\-pragmas\fR" 4
.IX Item "-Wunknown-pragmas"
Warn when a #pragma directive is encountered which is not understood by
\&\s-1GCC\s0. If this command line option is used, warnings will even be issued
for unknown pragmas in system header files. This is not the case if
the warnings were only enabled by the \fB\-Wall\fR command line option.
! .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 which 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 \fB\-Wall\fR.
! .IP "\fB\-Wall\fR" 4
.IX Item "-Wall"
All of the above \fB\-W\fR options combined. 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 Dialect Options\fR.
.PP
The following \fB\-W...\fR options are not implied by \fB\-Wall\fR.
Some of them warn about constructions that users generally do not
*************** consider questionable, but which occasio
*** 2123,2133 ****
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.
! .Ip "\fB\-W\fR" 4
.IX Item "-W"
Print extra warning messages for these events:
.RS 4
! .Ip "\(bu" 4
A function can return either with or without a value. (Falling
off the end of the function body is considered returning without
a value.) For example, this function would evoke such a
--- 2131,2141 ----
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.
! .IP "\fB\-W\fR" 4
.IX Item "-W"
Print extra warning messages for these events:
.RS 4
! .IP "*" 4
A function can return either with or without a value. (Falling
off the end of the function body is considered returning without
a value.) For example, this function would evoke such a
*************** warning:
*** 2140,2174 ****
\& return a;
\& }
.Ve
! .Ip "\(bu" 4
An expression-statement or the left-hand side of a comma expression
contains no side effects.
To suppress the warning, cast the unused expression to void.
For example, an expression such as \fBx[i,j]\fR will cause a warning,
but \fBx[(void)i,j]\fR will not.
! .Ip "\(bu" 4
An unsigned value is compared against zero with \fB<\fR or \fB>=\fR.
! .Ip "\(bu" 4
A comparison like \fBx<=y<=z\fR appears; this is equivalent to
\&\fB(x<=y ? 1 : 0) <= z\fR, which is a different interpretation from
that of ordinary mathematical notation.
! .Ip "\(bu" 4
Storage-class specifiers like \f(CW\*(C`static\*(C'\fR are not the first things in
a declaration. According to the C Standard, this usage is obsolescent.
! .Ip "\(bu" 4
The return type of a function has a type qualifier such as \f(CW\*(C`const\*(C'\fR.
Such a type qualifier has no effect, since the value returned by a
function is not an lvalue. (But don't warn about the \s-1GNU\s0 extension of
\&\f(CW\*(C`volatile void\*(C'\fR return types. That extension will be warned about
if \fB\-pedantic\fR is specified.)
! .Ip "\(bu" 4
If \fB\-Wall\fR or \fB\-Wunused\fR is also specified, warn about unused
arguments.
! .Ip "\(bu" 4
A comparison between signed and unsigned values could produce an
incorrect result when the signed value is converted to unsigned.
! (But don't warn if \fB\-Wno-sign-compare\fR is also specified.)
! .Ip "\(bu" 4
An aggregate has a partly bracketed initializer.
For example, the following code would evoke such a warning,
because braces are missing around the initializer for \f(CW\*(C`x.h\*(C'\fR:
--- 2148,2182 ----
\& return a;
\& }
.Ve
! .IP "*" 4
An expression-statement or the left-hand side of a comma expression
contains no side effects.
To suppress the warning, cast the unused expression to void.
For example, an expression such as \fBx[i,j]\fR will cause a warning,
but \fBx[(void)i,j]\fR will not.
! .IP "*" 4
An unsigned value is compared against zero with \fB<\fR or \fB>=\fR.
! .IP "*" 4
A comparison like \fBx<=y<=z\fR appears; this is equivalent to
\&\fB(x<=y ? 1 : 0) <= z\fR, which is a different interpretation from
that of ordinary mathematical notation.
! .IP "*" 4
Storage-class specifiers like \f(CW\*(C`static\*(C'\fR are not the first things in
a declaration. According to the C Standard, this usage is obsolescent.
! .IP "*" 4
The return type of a function has a type qualifier such as \f(CW\*(C`const\*(C'\fR.
Such a type qualifier has no effect, since the value returned by a
function is not an lvalue. (But don't warn about the \s-1GNU\s0 extension of
\&\f(CW\*(C`volatile void\*(C'\fR return types. That extension will be warned about
if \fB\-pedantic\fR is specified.)
! .IP "*" 4
If \fB\-Wall\fR or \fB\-Wunused\fR is also specified, warn about unused
arguments.
! .IP "*" 4
A comparison between signed and unsigned values could produce an
incorrect result when the signed value is converted to unsigned.
! (But don't warn if \fB\-Wno\-sign\-compare\fR is also specified.)
! .IP "*" 4
An aggregate has a partly bracketed initializer.
For example, the following code would evoke such a warning,
because braces are missing around the initializer for \f(CW\*(C`x.h\*(C'\fR:
*************** because braces are missing around the in
*** 2178,2184 ****
\& struct t { struct s h; int i; };
\& struct t x = { 1, 2, 3 };
.Ve
! .Ip "\(bu" 4
An aggregate has an initializer which does not initialize all members.
For example, the following code would cause such a warning, because
\&\f(CW\*(C`x.h\*(C'\fR would be implicitly initialized to zero:
--- 2186,2192 ----
\& struct t { struct s h; int i; };
\& struct t x = { 1, 2, 3 };
.Ve
! .IP "*" 4
An aggregate has an initializer which does not initialize all members.
For example, the following code would cause such a warning, because
\&\f(CW\*(C`x.h\*(C'\fR would be implicitly initialized to zero:
*************** For example, the following code would ca
*** 2190,2201 ****
.RE
.RS 4
.RE
! .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
--- 2198,2209 ----
.RE
.RS 4
.RE
! .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
*************** compiler output harder to read. Using t
*** 2204,2211 ****
\&\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 will \fInot\fR warn about unknown pragmas in system
! headers\-\-\-for that, \fB\-Wunknown-pragmas\fR must also be used.
! .Ip "\fB\-Wfloat-equal\fR" 4
.IX Item "-Wfloat-equal"
Warn if floating point values are used in equality comparisons.
.Sp
--- 2212,2219 ----
\&\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 will \fInot\fR warn about unknown pragmas in system
! headers\-\-\-for that, \fB\-Wunknown\-pragmas\fR must also be used.
! .IP "\fB\-Wfloat\-equal\fR" 4
.IX Item "-Wfloat-equal"
Warn if floating point values are used in equality comparisons.
.Sp
*************** different problem). In particular, inst
*** 2219,2235 ****
would 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 only)" 4
.IX Item "-Wtraditional (C only)"
Warn about certain constructs that behave differently in traditional and
\&\s-1ISO\s0 C. Also warn about \s-1ISO\s0 C constructs that have no traditional C
equivalent, and/or problematic constructs which should be avoided.
.RS 4
! .Ip "\(bu" 4
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 \s-1ISO\s0 C.
! .Ip "\(bu" 4
In traditional C, some preprocessor directives did not exist.
Traditional preprocessors would only consider a line to be a directive
if the \fB#\fR appeared in column 1 on the line. Therefore
--- 2227,2243 ----
would 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 only)" 4
.IX Item "-Wtraditional (C only)"
Warn about certain constructs that behave differently in traditional and
\&\s-1ISO\s0 C. Also warn about \s-1ISO\s0 C constructs that have no traditional C
equivalent, and/or problematic constructs which 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 does not in \s-1ISO\s0 C.
! .IP "*" 4
In traditional C, some preprocessor directives did not exist.
Traditional preprocessors would only consider 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
*** 2239,2249 ****
\&\fB#pragma\fR not understood by traditional C by indenting them. Some
traditional implementations would not recognize \fB#elif\fR, so it
suggests avoiding it altogether.
! .Ip "\(bu" 4
A function-like macro that appears without arguments.
! .Ip "\(bu" 4
The unary plus operator.
! .Ip "\(bu" 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
--- 2247,2257 ----
\&\fB#pragma\fR not understood by traditional C by indenting them. Some
traditional implementations would not recognize \fB#elif\fR, so it
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
*** 2251,2288 ****
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.
! .Ip "\(bu" 4
A function declared external in one block and then used after the end of
the block.
! .Ip "\(bu" 4
A \f(CW\*(C`switch\*(C'\fR statement has an operand of type \f(CW\*(C`long\*(C'\fR.
! .Ip "\(bu" 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 "\(bu" 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 "\(bu" 4
Usage of \s-1ISO\s0 string concatenation is detected.
! .Ip "\(bu" 4
Initialization of automatic aggregates.
! .Ip "\(bu" 4
Identifier conflicts with labels. Traditional C lacks a separate
namespace for labels.
! .Ip "\(bu" 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 "\(bu" 4
Conversions by prototypes between fixed/floating point values and vice
versa. The absence of these prototypes when compiling with traditional
C would cause serious problems. This is a subset of the possible
conversion warnings, for the full set use \fB\-Wconversion\fR.
! .Ip "\(bu" 4
Use of \s-1ISO\s0 C style function definitions. This warning intentionally is
\&\fInot\fR issued for prototype declarations or variadic functions
because these \s-1ISO\s0 C features will appear in your code when using
--- 2259,2296 ----
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.
! .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 would cause serious problems. This is a subset of the possible
conversion warnings, for the full set use \fB\-Wconversion\fR.
! .IP "*" 4
Use of \s-1ISO\s0 C style function definitions. This warning intentionally is
\&\fInot\fR issued for prototype declarations or variadic functions
because these \s-1ISO\s0 C features will appear in your code when using
*************** traditional C compatibility.
*** 2293,2337 ****
.RE
.RS 4
.RE
! .Ip "\fB\-Wundef\fR" 4
.IX Item "-Wundef"
Warn if an undefined identifier is evaluated in an \fB#if\fR directive.
! .Ip "\fB\-Wendif-labels\fR" 4
.IX Item "-Wendif-labels"
Warn whenever an \fB#else\fR or an \fB#endif\fR are followed by text.
! .Ip "\fB\-Wshadow\fR" 4
.IX Item "-Wshadow"
Warn whenever a local variable shadows another local variable, parameter or
global variable or whenever a built-in function is shadowed.
! .Ip "\fB\-Wlarger-than-\fR\fIlen\fR" 4
.IX Item "-Wlarger-than-len"
Warn whenever an object of larger than \fIlen\fR bytes is defined.
! .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. \s-1GNU\s0 C assigns these types a size of 1, for
convenience in calculations with \f(CW\*(C`void *\*(C'\fR pointers and pointers
to functions.
! .Ip "\fB\-Wbad-function-cast\fR (C only)" 4
.IX Item "-Wbad-function-cast (C only)"
Warn whenever a function call is cast to a non-matching type.
For example, warn if \f(CW\*(C`int malloc()\*(C'\fR is cast to \f(CW\*(C`anything *\*(C'\fR.
! .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
to an ordinary \f(CW\*(C`char *\*(C'\fR.
! .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\-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 will get a warning; when compiling \*(C+, warn about the
deprecated conversion from string constants to \f(CW\*(C`char *\*(C'\fR.
These warnings will help you find at
--- 2301,2345 ----
.RE
.RS 4
.RE
! .IP "\fB\-Wundef\fR" 4
.IX Item "-Wundef"
Warn if an undefined identifier is evaluated in an \fB#if\fR directive.
! .IP "\fB\-Wendif\-labels\fR" 4
.IX Item "-Wendif-labels"
Warn whenever an \fB#else\fR or an \fB#endif\fR are followed by text.
! .IP "\fB\-Wshadow\fR" 4
.IX Item "-Wshadow"
Warn whenever a local variable shadows another local variable, parameter or
global variable or whenever a built-in function is shadowed.
! .IP "\fB\-Wlarger\-than\-\fR\fIlen\fR" 4
.IX Item "-Wlarger-than-len"
Warn whenever an object of larger than \fIlen\fR bytes is defined.
! .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. \s-1GNU\s0 C assigns these types a size of 1, for
convenience in calculations with \f(CW\*(C`void *\*(C'\fR pointers and pointers
to functions.
! .IP "\fB\-Wbad\-function\-cast\fR (C only)" 4
.IX Item "-Wbad-function-cast (C only)"
Warn whenever a function call is cast to a non-matching type.
For example, warn if \f(CW\*(C`int malloc()\*(C'\fR is cast to \f(CW\*(C`anything *\*(C'\fR.
! .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
to an ordinary \f(CW\*(C`char *\*(C'\fR.
! .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\-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 will get a warning; when compiling \*(C+, warn about the
deprecated conversion from string constants to \f(CW\*(C`char *\*(C'\fR.
These warnings will help you find at
*************** compile time code that can try to write
*** 2339,2345 ****
only if you have been very careful about using \f(CW\*(C`const\*(C'\fR in
declarations and prototypes. Otherwise, it will just be a nuisance;
this is why we did not make \fB\-Wall\fR request these warnings.
! .Ip "\fB\-Wconversion\fR" 4
.IX Item "-Wconversion"
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
--- 2347,2353 ----
only if you have been very careful about using \f(CW\*(C`const\*(C'\fR in
declarations and prototypes. Otherwise, it will just be a nuisance;
this is why we did not make \fB\-Wall\fR request these warnings.
! .IP "\fB\-Wconversion\fR" 4
.IX Item "-Wconversion"
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
*************** Also, warn if a negative integer constan
*** 2351,2386 ****
converted to an unsigned type. For example, warn about the assignment
\&\f(CW\*(C`x = \-1\*(C'\fR if \f(CW\*(C`x\*(C'\fR is unsigned. But do not warn about explicit
casts like \f(CW\*(C`(unsigned) \-1\*(C'\fR.
! .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.
This warning is enabled by \fB\-W\fR, and by \fB\-Wall\fR
in \*(C+ only.
! .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\-Wstrict-prototypes\fR (C only)" 4
.IX Item "-Wstrict-prototypes (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 which specifies the argument
types.)
! .Ip "\fB\-Wmissing-prototypes\fR (C only)" 4
.IX Item "-Wmissing-prototypes (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. The aim is to detect global functions that fail
to be declared in header files.
! .Ip "\fB\-Wmissing-declarations\fR (C only)" 4
.IX Item "-Wmissing-declarations (C only)"
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.
! .Ip "\fB\-Wmissing-noreturn\fR" 4
.IX Item "-Wmissing-noreturn"
Warn about functions which might be candidates for attribute \f(CW\*(C`noreturn\*(C'\fR.
Note these are only possible candidates, not absolute ones. Care should
--- 2359,2394 ----
converted to an unsigned type. For example, warn about the assignment
\&\f(CW\*(C`x = \-1\*(C'\fR if \f(CW\*(C`x\*(C'\fR is unsigned. But do not warn about explicit
casts like \f(CW\*(C`(unsigned) \-1\*(C'\fR.
! .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.
This warning is enabled by \fB\-W\fR, and by \fB\-Wall\fR
in \*(C+ only.
! .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\-Wstrict\-prototypes\fR (C only)" 4
.IX Item "-Wstrict-prototypes (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 which specifies the argument
types.)
! .IP "\fB\-Wmissing\-prototypes\fR (C only)" 4
.IX Item "-Wmissing-prototypes (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. The aim is to detect global functions that fail
to be declared in header files.
! .IP "\fB\-Wmissing\-declarations\fR (C only)" 4
.IX Item "-Wmissing-declarations (C only)"
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.
! .IP "\fB\-Wmissing\-noreturn\fR" 4
.IX Item "-Wmissing-noreturn"
Warn about functions which might be candidates for attribute \f(CW\*(C`noreturn\*(C'\fR.
Note these are only possible candidates, not absolute ones. Care should
*************** be taken to manually verify functions ac
*** 2388,2394 ****
adding the \f(CW\*(C`noreturn\*(C'\fR attribute, otherwise subtle code generation
bugs could be introduced. You will not get a warning for \f(CW\*(C`main\*(C'\fR in
hosted C environments.
! .Ip "\fB\-Wmissing-format-attribute\fR" 4
.IX Item "-Wmissing-format-attribute"
If \fB\-Wformat\fR is enabled, also warn about functions which might be
candidates for \f(CW\*(C`format\*(C'\fR attributes. Note these are only possible
--- 2396,2402 ----
adding the \f(CW\*(C`noreturn\*(C'\fR attribute, otherwise subtle code generation
bugs could be introduced. You will not get a warning for \f(CW\*(C`main\*(C'\fR in
hosted C environments.
! .IP "\fB\-Wmissing\-format\-attribute\fR" 4
.IX Item "-Wmissing-format-attribute"
If \fB\-Wformat\fR is enabled, also warn about functions which might be
candidates for \f(CW\*(C`format\*(C'\fR attributes. Note these are only possible
*************** like \f(CW\*(C`vprintf\*(C'\fR or \f(CW\
*** 2398,2415 ****
case, and some functions for which \f(CW\*(C`format\*(C'\fR attributes are
appropriate may not be detected. This option has no effect unless
\&\fB\-Wformat\fR is enabled (possibly by \fB\-Wall\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\-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.
(@pxref{Function Attributes}, \f(CW@pxref\fR{Variable Attributes},
\&\f(CW@pxref\fR{Type Attributes}.)
! .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.
--- 2406,2423 ----
case, and some functions for which \f(CW\*(C`format\*(C'\fR attributes are
appropriate may not be detected. This option has no effect unless
\&\fB\-Wformat\fR is enabled (possibly by \fB\-Wall\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\-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.
(@pxref{Function Attributes}, \f(CW@pxref\fR{Variable Attributes},
\&\f(CW@pxref\fR{Type Attributes}.)
! .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.
*************** have the packed attribute:
*** 2428,2447 ****
\& struct foo f;
\& };
.Ve
! .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\-Wnested-externs\fR (C only)" 4
.IX Item "-Wnested-externs (C only)"
Warn if an \f(CW\*(C`extern\*(C'\fR declaration is encountered within a function.
! .Ip "\fB\-Wunreachable-code\fR" 4
.IX Item "-Wunreachable-code"
Warn if the compiler detects that code will never be executed.
.Sp
--- 2436,2455 ----
\& struct foo f;
\& };
.Ve
! .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\-Wnested\-externs\fR (C only)" 4
.IX Item "-Wnested-externs (C only)"
Warn if an \f(CW\*(C`extern\*(C'\fR declaration is encountered within a function.
! .IP "\fB\-Wunreachable\-code\fR" 4
.IX Item "-Wunreachable-code"
Warn if the compiler detects that code will never be executed.
.Sp
*************** This option is not made part of \fB\-Wal
*** 2461,2468 ****
version of a program there is often substantial code which checks
correct functioning of the program and is, hopefully, unreachable
because the program does work. Another common use of unreachable
! code is to provide behavior which is selectable at compile-time.
! .Ip "\fB\-Winline\fR" 4
.IX Item "-Winline"
Warn if a function can not be inlined and it was declared as inline.
Even with this option, the compiler will not warn about failures to
--- 2469,2476 ----
version of a program there is often substantial code which checks
correct functioning of the program and is, hopefully, unreachable
because the program does work. Another common use of unreachable
! code is to provide behavior which is selectable at compile\-time.
! .IP "\fB\-Winline\fR" 4
.IX Item "-Winline"
Warn if a function can not be inlined and it was declared as inline.
Even with this option, the compiler will not warn about failures to
*************** the size of the function being inlined a
*** 2474,2486 ****
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\-Wlong-long\fR" 4
.IX Item "-Wlong-long"
Warn if \fBlong long\fR type is used. This is default. To inhibit
! the warning messages, use \fB\-Wno-long-long\fR. Flags
! \&\fB\-Wlong-long\fR and \fB\-Wno-long-long\fR are taken into account
only when \fB\-pedantic\fR flag is used.
! .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
--- 2482,2494 ----
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\-Wlong\-long\fR" 4
.IX Item "-Wlong-long"
Warn if \fBlong long\fR type is used. This is default. To inhibit
! the warning messages, use \fB\-Wno\-long\-long\fR. Flags
! \&\fB\-Wlong\-long\fR and \fB\-Wno\-long\-long\fR are taken into account
only when \fB\-pedantic\fR flag is used.
! .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 optim
*** 2488,2501 ****
effectively. Often, the problem is that your code is too big or too
complex; \s-1GCC\s0 will refuse to optimize programs when the optimization
itself is likely to take inordinate amounts of time.
! .Ip "\fB\-Werror\fR" 4
.IX Item "-Werror"
Make all warnings into errors.
.Sh "Options for Debugging Your Program or \s-1GCC\s0"
.IX Subsection "Options for Debugging Your Program or GCC"
\&\s-1GCC\s0 has various special options that are used for debugging
either your program or \s-1GCC:\s0
! .Ip "\fB\-g\fR" 4
.IX Item "-g"
Produce debugging information in the operating system's native format
(stabs, \s-1COFF\s0, \s-1XCOFF\s0, or \s-1DWARF\s0). \s-1GDB\s0 can work with this debugging
--- 2496,2509 ----
effectively. Often, the problem is that your code is too big or too
complex; \s-1GCC\s0 will refuse to optimize programs when the optimization
itself is likely to take inordinate amounts of time.
! .IP "\fB\-Werror\fR" 4
.IX Item "-Werror"
Make all warnings into errors.
.Sh "Options for Debugging Your Program or \s-1GCC\s0"
.IX Subsection "Options for Debugging Your Program or GCC"
\&\s-1GCC\s0 has various special options that are used for debugging
either your program or \s-1GCC:\s0
! .IP "\fB\-g\fR" 4
.IX Item "-g"
Produce debugging information in the operating system's native format
(stabs, \s-1COFF\s0, \s-1XCOFF\s0, or \s-1DWARF\s0). \s-1GDB\s0 can work with this debugging
*************** makes debugging work better in \s-1GDB\s
*** 2507,2513 ****
crash or
refuse to read the program. If you want to control for certain whether
to generate the extra information, use \fB\-gstabs+\fR, \fB\-gstabs\fR,
! \&\fB\-gxcoff+\fR, \fB\-gxcoff\fR, \fB\-gdwarf-1+\fR, \fB\-gdwarf-1\fR,
or \fB\-gvms\fR (see below).
.Sp
Unlike most other C compilers, \s-1GCC\s0 allows you to use \fB\-g\fR with
--- 2515,2521 ----
crash or
refuse to read the program. If you want to control for certain whether
to generate the extra information, use \fB\-gstabs+\fR, \fB\-gstabs\fR,
! \&\fB\-gxcoff+\fR, \fB\-gxcoff\fR, \fB\-gdwarf\-1+\fR, \fB\-gdwarf\-1\fR,
or \fB\-gvms\fR (see below).
.Sp
Unlike most other C compilers, \s-1GCC\s0 allows you to use \fB\-g\fR with
*************** it reasonable to use the optimizer for p
*** 2523,2571 ****
.Sp
The following options are useful when \s-1GCC\s0 is generated with the
capability for more than one debugging format.
! .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 2, stabs, or the native format
if neither of those are supported), including \s-1GDB\s0 extensions if at all
possible.
! .Ip "\fB\-gstabs\fR" 4
.IX Item "-gstabs"
Produce debugging information in stabs format (if that is supported),
without \s-1GDB\s0 extensions. This is the format used by \s-1DBX\s0 on most \s-1BSD\s0
systems. On \s-1MIPS\s0, Alpha and System V Release 4 systems this option
produces stabs debugging output which is not understood by \s-1DBX\s0 or \s-1SDB\s0.
On System V Release 4 systems this option requires the \s-1GNU\s0 assembler.
! .Ip "\fB\-gstabs+\fR" 4
.IX Item "-gstabs+"
Produce debugging information in stabs format (if that is supported),
using \s-1GNU\s0 extensions understood only by the \s-1GNU\s0 debugger (\s-1GDB\s0). The
use of these extensions is likely to make other debuggers crash or
refuse to read the program.
! .Ip "\fB\-gcoff\fR" 4
.IX Item "-gcoff"
Produce debugging information in \s-1COFF\s0 format (if that is supported).
This is the format used by \s-1SDB\s0 on most System V systems prior to
System V Release 4.
! .Ip "\fB\-gxcoff\fR" 4
.IX Item "-gxcoff"
Produce debugging information in \s-1XCOFF\s0 format (if that is supported).
This is the format used by the \s-1DBX\s0 debugger on \s-1IBM\s0 \s-1RS/6000\s0 systems.
! .Ip "\fB\-gxcoff+\fR" 4
.IX Item "-gxcoff+"
Produce debugging information in \s-1XCOFF\s0 format (if that is supported),
using \s-1GNU\s0 extensions understood only by the \s-1GNU\s0 debugger (\s-1GDB\s0). The
use of these extensions is likely to make other debuggers crash or
refuse to read the program, and may cause assemblers other than the \s-1GNU\s0
assembler (\s-1GAS\s0) to fail with an error.
! .Ip "\fB\-gdwarf\fR" 4
.IX Item "-gdwarf"
Produce debugging information in \s-1DWARF\s0 version 1 format (if that is
supported). This is the format used by \s-1SDB\s0 on most System V Release 4
systems.
.Sp
This option is deprecated.
! .Ip "\fB\-gdwarf+\fR" 4
.IX Item "-gdwarf+"
Produce debugging information in \s-1DWARF\s0 version 1 format (if that is
supported), using \s-1GNU\s0 extensions understood only by the \s-1GNU\s0 debugger
--- 2531,2579 ----
.Sp
The following options are useful when \s-1GCC\s0 is generated with the
capability for more than one debugging format.
! .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 2, stabs, or the native format
if neither of those are supported), including \s-1GDB\s0 extensions if at all
possible.
! .IP "\fB\-gstabs\fR" 4
.IX Item "-gstabs"
Produce debugging information in stabs format (if that is supported),
without \s-1GDB\s0 extensions. This is the format used by \s-1DBX\s0 on most \s-1BSD\s0
systems. On \s-1MIPS\s0, Alpha and System V Release 4 systems this option
produces stabs debugging output which is not understood by \s-1DBX\s0 or \s-1SDB\s0.
On System V Release 4 systems this option requires the \s-1GNU\s0 assembler.
! .IP "\fB\-gstabs+\fR" 4
.IX Item "-gstabs+"
Produce debugging information in stabs format (if that is supported),
using \s-1GNU\s0 extensions understood only by the \s-1GNU\s0 debugger (\s-1GDB\s0). The
use of these extensions is likely to make other debuggers crash or
refuse to read the program.
! .IP "\fB\-gcoff\fR" 4
.IX Item "-gcoff"
Produce debugging information in \s-1COFF\s0 format (if that is supported).
This is the format used by \s-1SDB\s0 on most System V systems prior to
System V Release 4.
! .IP "\fB\-gxcoff\fR" 4
.IX Item "-gxcoff"
Produce debugging information in \s-1XCOFF\s0 format (if that is supported).
This is the format used by the \s-1DBX\s0 debugger on \s-1IBM\s0 \s-1RS/6000\s0 systems.
! .IP "\fB\-gxcoff+\fR" 4
.IX Item "-gxcoff+"
Produce debugging information in \s-1XCOFF\s0 format (if that is supported),
using \s-1GNU\s0 extensions understood only by the \s-1GNU\s0 debugger (\s-1GDB\s0). The
use of these extensions is likely to make other debuggers crash or
refuse to read the program, and may cause assemblers other than the \s-1GNU\s0
assembler (\s-1GAS\s0) to fail with an error.
! .IP "\fB\-gdwarf\fR" 4
.IX Item "-gdwarf"
Produce debugging information in \s-1DWARF\s0 version 1 format (if that is
supported). This is the format used by \s-1SDB\s0 on most System V Release 4
systems.
.Sp
This option is deprecated.
! .IP "\fB\-gdwarf+\fR" 4
.IX Item "-gdwarf+"
Produce debugging information in \s-1DWARF\s0 version 1 format (if that is
supported), using \s-1GNU\s0 extensions understood only by the \s-1GNU\s0 debugger
*************** supported), using \s-1GNU\s0 extensions
*** 2573,2598 ****
crash or refuse to read the program.
.Sp
This option is deprecated.
! .Ip "\fB\-gdwarf-2\fR" 4
.IX Item "-gdwarf-2"
Produce debugging information in \s-1DWARF\s0 version 2 format (if that is
supported). This is the format used by \s-1DBX\s0 on \s-1IRIX\s0 6.
! .Ip "\fB\-gvms\fR" 4
.IX Item "-gvms"
Produce debugging information in \s-1VMS\s0 debug format (if that is
supported). This is the format used by \s-1DEBUG\s0 on \s-1VMS\s0 systems.
! .Ip "\fB\-g\fR\fIlevel\fR" 4
.IX Item "-glevel"
.PD 0
! .Ip "\fB\-ggdb\fR\fIlevel\fR" 4
.IX Item "-ggdblevel"
! .Ip "\fB\-gstabs\fR\fIlevel\fR" 4
.IX Item "-gstabslevel"
! .Ip "\fB\-gcoff\fR\fIlevel\fR" 4
.IX Item "-gcofflevel"
! .Ip "\fB\-gxcoff\fR\fIlevel\fR" 4
.IX Item "-gxcofflevel"
! .Ip "\fB\-gvms\fR\fIlevel\fR" 4
.IX Item "-gvmslevel"
.PD
Request debugging information and also use \fIlevel\fR to specify how
--- 2581,2606 ----
crash or refuse to read the program.
.Sp
This option is deprecated.
! .IP "\fB\-gdwarf\-2\fR" 4
.IX Item "-gdwarf-2"
Produce debugging information in \s-1DWARF\s0 version 2 format (if that is
supported). This is the format used by \s-1DBX\s0 on \s-1IRIX\s0 6.
! .IP "\fB\-gvms\fR" 4
.IX Item "-gvms"
Produce debugging information in \s-1VMS\s0 debug format (if that is
supported). This is the format used by \s-1DEBUG\s0 on \s-1VMS\s0 systems.
! .IP "\fB\-g\fR\fIlevel\fR" 4
.IX Item "-glevel"
.PD 0
! .IP "\fB\-ggdb\fR\fIlevel\fR" 4
.IX Item "-ggdblevel"
! .IP "\fB\-gstabs\fR\fIlevel\fR" 4
.IX Item "-gstabslevel"
! .IP "\fB\-gcoff\fR\fIlevel\fR" 4
.IX Item "-gcofflevel"
! .IP "\fB\-gxcoff\fR\fIlevel\fR" 4
.IX Item "-gxcofflevel"
! .IP "\fB\-gvms\fR\fIlevel\fR" 4
.IX Item "-gvmslevel"
.PD
Request debugging information and also use \fIlevel\fR to specify how
*************** present in the program. Some debuggers
*** 2608,2646 ****
you use \fB\-g3\fR.
.Sp
Note that in order to avoid confusion between \s-1DWARF1\s0 debug level 2,
! and \s-1DWARF2\s0, neither \fB\-gdwarf\fR nor \fB\-gdwarf-2\fR accept
a concatenated debug level. Instead use an additional \fB\-g\fR\fIlevel\fR
option to change the debug level for \s-1DWARF1\s0 or \s-1DWARF2\s0.
! .Ip "\fB\-feliminate-dwarf2\-dups\fR" 4
.IX Item "-feliminate-dwarf2-dups"
Compress \s-1DWARF2\s0 debugging information by eliminating duplicated
information about each symbol. This option only makes sense when
! generating \s-1DWARF2\s0 debugging information with \fB\-gdwarf-2\fR.
! .Ip "\fB\-p\fR" 4
.IX Item "-p"
Generate extra code to write profile information suitable for the
analysis program \fBprof\fR. You must use this option when compiling
the source files you want data about, and you must also use it when
linking.
! .Ip "\fB\-pg\fR" 4
.IX Item "-pg"
Generate extra code to write profile information suitable for the
analysis program \fBgprof\fR. You must use this option when compiling
the source files you want data about, and you must also use it when
linking.
! .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 about the time consumed by each
pass when it finishes.
! .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\-fprofile-arcs\fR" 4
.IX Item "-fprofile-arcs"
Instrument \fIarcs\fR during compilation to generate coverage data or
for profile-directed block ordering. During execution the program
--- 2616,2654 ----
you use \fB\-g3\fR.
.Sp
Note that in order to avoid confusion between \s-1DWARF1\s0 debug level 2,
! and \s-1DWARF2\s0, neither \fB\-gdwarf\fR nor \fB\-gdwarf\-2\fR accept
a concatenated debug level. Instead use an additional \fB\-g\fR\fIlevel\fR
option to change the debug level for \s-1DWARF1\s0 or \s-1DWARF2\s0.
! .IP "\fB\-feliminate\-dwarf2\-dups\fR" 4
.IX Item "-feliminate-dwarf2-dups"
Compress \s-1DWARF2\s0 debugging information by eliminating duplicated
information about each symbol. This option only makes sense when
! generating \s-1DWARF2\s0 debugging information with \fB\-gdwarf\-2\fR.
! .IP "\fB\-p\fR" 4
.IX Item "-p"
Generate extra code to write profile information suitable for the
analysis program \fBprof\fR. You must use this option when compiling
the source files you want data about, and you must also use it when
linking.
! .IP "\fB\-pg\fR" 4
.IX Item "-pg"
Generate extra code to write profile information suitable for the
analysis program \fBgprof\fR. You must use this option when compiling
the source files you want data about, and you must also use it when
linking.
! .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 about the time consumed by each
pass when it finishes.
! .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\-fprofile\-arcs\fR" 4
.IX Item "-fprofile-arcs"
Instrument \fIarcs\fR during compilation to generate coverage data or
for profile-directed block ordering. During execution the program
*************** for input file \fIdir/foo.c\fR, or \fIdi
*** 2654,2685 ****
specified as \fB\-o dir/foo.o\fR).
.Sp
For profile-directed block ordering, compile the program with
! \&\fB\-fprofile-arcs\fR plus optimization and code generation options,
generate the arc profile information by running the program on a
selected workload, and then compile the program again with the same
optimization and code generation options plus
! \&\fB\-fbranch-probabilities\fR.
.Sp
! The other use of \fB\-fprofile-arcs\fR is for use with \fBgcov\fR,
! when it is used with the \fB\-ftest-coverage\fR option.
.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
executed. When an arc is the only exit or only entrance to a block, the
instrumentation code can be added to the block; otherwise, a new basic
block must be created to hold the instrumentation code.
! .Ip "\fB\-ftest-coverage\fR" 4
.IX Item "-ftest-coverage"
Create data files for the \fBgcov\fR code-coverage utility. See
! \&\fB\-fprofile-arcs\fR option above for a description of \fIauxname\fR.
.RS 4
! .Ip "\fIauxname\fR\fB.bb\fR" 4
.IX Item "auxname.bb"
A mapping from basic blocks to line numbers, which \fBgcov\fR uses to
associate basic block execution counts with line numbers.
! .Ip "\fIauxname\fR\fB.bbg\fR" 4
.IX Item "auxname.bbg"
A list of all arcs in the program flow graph. This allows \fBgcov\fR
to reconstruct the program flow graph, so that it can compute all basic
--- 2662,2693 ----
specified as \fB\-o dir/foo.o\fR).
.Sp
For profile-directed block ordering, compile the program with
! \&\fB\-fprofile\-arcs\fR plus optimization and code generation options,
generate the arc profile information by running the program on a
selected workload, and then compile the program again with the same
optimization and code generation options plus
! \&\fB\-fbranch\-probabilities\fR.
.Sp
! The other use of \fB\-fprofile\-arcs\fR is for use with \fBgcov\fR,
! when it is used with the \fB\-ftest\-coverage\fR option.
.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
executed. When an arc is the only exit or only entrance to a block, the
instrumentation code can be added to the block; otherwise, a new basic
block must be created to hold the instrumentation code.
! .IP "\fB\-ftest\-coverage\fR" 4
.IX Item "-ftest-coverage"
Create data files for the \fBgcov\fR code-coverage utility. See
! \&\fB\-fprofile\-arcs\fR option above for a description of \fIauxname\fR.
.RS 4
! .IP "\fIauxname\fR\fB.bb\fR" 4
.IX Item "auxname.bb"
A mapping from basic blocks to line numbers, which \fBgcov\fR uses to
associate basic block execution counts with line numbers.
! .IP "\fIauxname\fR\fB.bbg\fR" 4
.IX Item "auxname.bbg"
A list of all arcs in the program flow graph. This allows \fBgcov\fR
to reconstruct the program flow graph, so that it can compute all basic
*************** block and arc execution counts from the
*** 2688,2699 ****
.RE
.RS 4
.Sp
! Use \fB\-ftest-coverage\fR with \fB\-fprofile-arcs\fR; the latter
option adds instrumentation to the program, which then writes
execution counts to another data file:
! .RS 4
! .RE
! .Ip "\fIauxname\fR\fB.da\fR" 4
.IX Item "auxname.da"
Runtime arc execution counts, used in conjunction with the arc
information in the file \fI\fIauxname\fI.bbg\fR.
--- 2696,2705 ----
.RE
.RS 4
.Sp
! Use \fB\-ftest\-coverage\fR with \fB\-fprofile\-arcs\fR; the latter
option adds instrumentation to the program, which then writes
execution counts to another data file:
! .IP "\fIauxname\fR\fB.da\fR" 4
.IX Item "auxname.da"
Runtime arc execution counts, used in conjunction with the arc
information in the file \fI\fIauxname\fI.bbg\fR.
*************** information in the file \fI\fIauxname\fI
*** 2701,2709 ****
.RS 4
.Sp
Coverage data will map better to the source files if
! \&\fB\-ftest-coverage\fR is used without optimization.
.RE
! .Ip "\fB\-d\fR\fIletters\fR" 4
.IX Item "-dletters"
Says to make debugging dumps during compilation at times specified by
\&\fIletters\fR. This is used for debugging the compiler. The file names
--- 2707,2715 ----
.RS 4
.Sp
Coverage data will map better to the source files if
! \&\fB\-ftest\-coverage\fR is used without optimization.
.RE
! .IP "\fB\-d\fR\fIletters\fR" 4
.IX Item "-dletters"
Says to make debugging dumps during compilation at times specified by
\&\fIletters\fR. This is used for debugging the compiler. The file names
*************** suffix is removed (e.g. \fIfoo.00.rtl\f
*** 2715,2941 ****
Here are the possible letters for use in \fIletters\fR, and their
meanings:
.RS 4
! .Ip "\fBA\fR" 4
.IX Item "A"
Annotate the assembler output with miscellaneous debugging information.
! .Ip "\fBb\fR" 4
.IX Item "b"
Dump after computing branch probabilities, to \fI\fIfile\fI.14.bp\fR.
! .Ip "\fBB\fR" 4
.IX Item "B"
Dump after block reordering, to \fI\fIfile\fI.32.bbro\fR.
! .Ip "\fBc\fR" 4
.IX Item "c"
Dump after instruction combination, to the file \fI\fIfile\fI.19.combine\fR.
! .Ip "\fBC\fR" 4
.IX Item "C"
Dump after the first if conversion, to the file \fI\fIfile\fI.15.ce1\fR.
! .Ip "\fBd\fR" 4
.IX Item "d"
Dump after delayed branch scheduling, to \fI\fIfile\fI.34.dbr\fR.
! .Ip "\fBD\fR" 4
.IX Item "D"
Dump all macro definitions, at the end of preprocessing, in addition to
normal output.
! .Ip "\fBe\fR" 4
.IX Item "e"
Dump after \s-1SSA\s0 optimizations, to \fI\fIfile\fI.04.ssa\fR and
\&\fI\fIfile\fI.07.ussa\fR.
! .Ip "\fBE\fR" 4
.IX Item "E"
Dump after the second if conversion, to \fI\fIfile\fI.29.ce3\fR.
! .Ip "\fBf\fR" 4
.IX Item "f"
Dump after control and data flow analysis, to \fI\fIfile\fI.14.cfg\fR.
Also dump after life analysis, to \fI\fIfile\fI.18.life\fR.
! .Ip "\fBF\fR" 4
.IX Item "F"
Dump after purging \f(CW\*(C`ADDRESSOF\*(C'\fR codes, to \fI\fIfile\fI.10.addressof\fR.
! .Ip "\fBg\fR" 4
.IX Item "g"
Dump after global register allocation, to \fI\fIfile\fI.24.greg\fR.
! .Ip "\fBG\fR" 4
.IX Item "G"
Dump after \s-1GCSE\s0, to \fI\fIfile\fI.11.gcse\fR.
! .Ip "\fBh\fR" 4
.IX Item "h"
Dump after finalization of \s-1EH\s0 handling code, to \fI\fIfile\fI.02.eh\fR.
! .Ip "\fBi\fR" 4
.IX Item "i"
Dump after sibling call optimizations, to \fI\fIfile\fI.01.sibling\fR.
! .Ip "\fBj\fR" 4
.IX Item "j"
Dump after the first jump optimization, to \fI\fIfile\fI.03.jump\fR.
! .Ip "\fBk\fR" 4
.IX Item "k"
Dump after conversion from registers to stack, to \fI\fIfile\fI.31.stack\fR.
! .Ip "\fBl\fR" 4
.IX Item "l"
Dump after local register allocation, to \fI\fIfile\fI.23.lreg\fR.
! .Ip "\fBL\fR" 4
.IX Item "L"
Dump after loop optimization, to \fI\fIfile\fI.12.loop\fR.
! .Ip "\fBM\fR" 4
.IX Item "M"
Dump after performing the machine dependent reorganization pass, to
\&\fI\fIfile\fI.33.mach\fR.
! .Ip "\fBn\fR" 4
.IX Item "n"
Dump after register renumbering, to \fI\fIfile\fI.28.rnreg\fR.
! .Ip "\fBN\fR" 4
.IX Item "N"
Dump after the register move pass, to \fI\fIfile\fI.21.regmove\fR.
! .Ip "\fBo\fR" 4
.IX Item "o"
Dump after post-reload optimizations, to \fI\fIfile\fI.25.postreload\fR.
! .Ip "\fBr\fR" 4
.IX Item "r"
Dump after \s-1RTL\s0 generation, to \fI\fIfile\fI.00.rtl\fR.
! .Ip "\fBR\fR" 4
.IX Item "R"
Dump after the second scheduling pass, to \fI\fIfile\fI.30.sched2\fR.
! .Ip "\fBs\fR" 4
.IX Item "s"
Dump after \s-1CSE\s0 (including the jump optimization that sometimes follows
\&\s-1CSE\s0), to \fI\fIfile\fI.09.cse\fR.
! .Ip "\fBS\fR" 4
.IX Item "S"
Dump after the first scheduling pass, to \fI\fIfile\fI.22.sched\fR.
! .Ip "\fBt\fR" 4
.IX Item "t"
Dump after the second \s-1CSE\s0 pass (including the jump optimization that
sometimes follows \s-1CSE\s0), to \fI\fIfile\fI.17.cse2\fR.
! .Ip "\fBT\fR" 4
.IX Item "T"
Dump after running tracer, to \fI\fIfile\fI.16.tracer\fR.
! .Ip "\fBu\fR" 4
.IX Item "u"
Dump after null pointer elimination pass to \fI\fIfile\fI.08.null\fR.
! .Ip "\fBw\fR" 4
.IX Item "w"
Dump after the second flow pass, to \fI\fIfile\fI.26.flow2\fR.
! .Ip "\fBW\fR" 4
.IX Item "W"
Dump after \s-1SSA\s0 conditional constant propagation, to
\&\fI\fIfile\fI.05.ssaccp\fR.
! .Ip "\fBX\fR" 4
.IX Item "X"
Dump after \s-1SSA\s0 dead code elimination, to \fI\fIfile\fI.06.ssadce\fR.
! .Ip "\fBz\fR" 4
.IX Item "z"
Dump after the peephole pass, to \fI\fIfile\fI.27.peephole2\fR.
! .Ip "\fBa\fR" 4
.IX Item "a"
Produce all the dumps listed above.
! .Ip "\fBm\fR" 4
.IX Item "m"
Print statistics on memory usage, at the end of the run, to
standard error.
! .Ip "\fBp\fR" 4
.IX Item "p"
Annotate the assembler output with a comment indicating which
pattern and alternative was used. The length of each instruction is
also printed.
! .Ip "\fBP\fR" 4
.IX Item "P"
Dump the \s-1RTL\s0 in the assembler output as a comment before each instruction.
Also turns on \fB\-dp\fR annotation.
! .Ip "\fBv\fR" 4
.IX Item "v"
For each of the other indicated dump files (except for
\&\fI\fIfile\fI.00.rtl\fR), dump a representation of the control flow graph
suitable for viewing with \s-1VCG\s0 to \fI\fIfile\fI.\fIpass\fI.vcg\fR.
! .Ip "\fBx\fR" 4
.IX Item "x"
Just generate \s-1RTL\s0 for a function instead of compiling it. Usually used
with \fBr\fR.
! .Ip "\fBy\fR" 4
.IX Item "y"
Dump debugging information during parsing, to standard error.
.RE
.RS 4
.RE
! .Ip "\fB\-fdump-unnumbered\fR" 4
.IX Item "-fdump-unnumbered"
When doing debugging dumps (see \fB\-d\fR option above), suppress instruction
numbers and line number note 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-translation-unit\fR (C and \*(C+ only)" 4
.IX Item "-fdump-translation-unit (C and only)"
.PD 0
! .Ip "\fB\-fdump-translation-unit-\fR\fIoptions\fR\fB \fR(C and \*(C+ only)" 4
.IX Item "-fdump-translation-unit-options (C and only)"
.PD
Dump a representation of the tree structure for the entire translation
unit to a file. The file name is made by appending \fI.tu\fR to the
! source file name. If the \fB-\fR\fIoptions\fR form is used, \fIoptions\fR
controls the details of the dump as described for the
! \&\fB\-fdump-tree\fR options.
! .Ip "\fB\-fdump-class-hierarchy\fR (\*(C+ only)" 4
.IX Item "-fdump-class-hierarchy ( only)"
.PD 0
! .Ip "\fB\-fdump-class-hierarchy-\fR\fIoptions\fR\fB \fR(\*(C+ only)" 4
.IX Item "-fdump-class-hierarchy-options ( only)"
.PD
Dump a representation of each class's hierarchy and virtual function
table layout to a file. The file name is made by appending \fI.class\fR
! to the source file name. If the \fB-\fR\fIoptions\fR form is used,
\&\fIoptions\fR controls the details of the dump as described for the
! \&\fB\-fdump-tree\fR options.
! .Ip "\fB\-fdump-tree-\fR\fIswitch\fR\fB \fR(\*(C+ only)" 4
.IX Item "-fdump-tree-switch ( only)"
.PD 0
! .Ip "\fB\-fdump-tree-\fR\fIswitch\fR\fB-\fR\fIoptions\fR\fB \fR(\*(C+ only)" 4
.IX Item "-fdump-tree-switch-options ( only)"
.PD
Control the dumping at various stages of processing the intermediate
language tree to a file. The file name is generated by appending a switch
! specific suffix to the source file name. If the \fB-\fR\fIoptions\fR
! form is used, \fIoptions\fR is a list of \fB-\fR separated options that
control the details of the dump. Not all options are applicable to all
dumps, those which are not meaningful will be 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 "\fBslim\fR" 4
.IX Item "slim"
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.
! .Ip "\fBall\fR" 4
.IX Item "all"
Turn on all options.
.RE
.RS 4
.Sp
The following tree dumps are possible:
! .RS 4
! .RE
! .Ip "\fBoriginal\fR" 4
.IX Item "original"
Dump before any tree based optimization, to \fI\fIfile\fI.original\fR.
! .Ip "\fBoptimized\fR" 4
.IX Item "optimized"
Dump after all tree based optimization, to \fI\fIfile\fI.optimized\fR.
! .Ip "\fBinlined\fR" 4
.IX Item "inlined"
Dump after function inlining, to \fI\fIfile\fI.inlined\fR.
.RE
.RS 4
.RE
! .Ip "\fB\-frandom-seed=\fR\fIstring\fR" 4
.IX Item "-frandom-seed=string"
This option provides a seed that \s-1GCC\s0 uses when it would otherwise use
random numbers. At present, this is used to generate certain symbol names
that have to be different in every compiled file.
.Sp
The \fIstring\fR should be different for every file you compile.
! .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. This information is
--- 2721,2945 ----
Here are the possible letters for use in \fIletters\fR, and their
meanings:
.RS 4
! .IP "\fBA\fR" 4
.IX Item "A"
Annotate the assembler output with miscellaneous debugging information.
! .IP "\fBb\fR" 4
.IX Item "b"
Dump after computing branch probabilities, to \fI\fIfile\fI.14.bp\fR.
! .IP "\fBB\fR" 4
.IX Item "B"
Dump after block reordering, to \fI\fIfile\fI.32.bbro\fR.
! .IP "\fBc\fR" 4
.IX Item "c"
Dump after instruction combination, to the file \fI\fIfile\fI.19.combine\fR.
! .IP "\fBC\fR" 4
.IX Item "C"
Dump after the first if conversion, to the file \fI\fIfile\fI.15.ce1\fR.
! .IP "\fBd\fR" 4
.IX Item "d"
Dump after delayed branch scheduling, to \fI\fIfile\fI.34.dbr\fR.
! .IP "\fBD\fR" 4
.IX Item "D"
Dump all macro definitions, at the end of preprocessing, in addition to
normal output.
! .IP "\fBe\fR" 4
.IX Item "e"
Dump after \s-1SSA\s0 optimizations, to \fI\fIfile\fI.04.ssa\fR and
\&\fI\fIfile\fI.07.ussa\fR.
! .IP "\fBE\fR" 4
.IX Item "E"
Dump after the second if conversion, to \fI\fIfile\fI.29.ce3\fR.
! .IP "\fBf\fR" 4
.IX Item "f"
Dump after control and data flow analysis, to \fI\fIfile\fI.14.cfg\fR.
Also dump after life analysis, to \fI\fIfile\fI.18.life\fR.
! .IP "\fBF\fR" 4
.IX Item "F"
Dump after purging \f(CW\*(C`ADDRESSOF\*(C'\fR codes, to \fI\fIfile\fI.10.addressof\fR.
! .IP "\fBg\fR" 4
.IX Item "g"
Dump after global register allocation, to \fI\fIfile\fI.24.greg\fR.
! .IP "\fBG\fR" 4
.IX Item "G"
Dump after \s-1GCSE\s0, to \fI\fIfile\fI.11.gcse\fR.
! .IP "\fBh\fR" 4
.IX Item "h"
Dump after finalization of \s-1EH\s0 handling code, to \fI\fIfile\fI.02.eh\fR.
! .IP "\fBi\fR" 4
.IX Item "i"
Dump after sibling call optimizations, to \fI\fIfile\fI.01.sibling\fR.
! .IP "\fBj\fR" 4
.IX Item "j"
Dump after the first jump optimization, to \fI\fIfile\fI.03.jump\fR.
! .IP "\fBk\fR" 4
.IX Item "k"
Dump after conversion from registers to stack, to \fI\fIfile\fI.31.stack\fR.
! .IP "\fBl\fR" 4
.IX Item "l"
Dump after local register allocation, to \fI\fIfile\fI.23.lreg\fR.
! .IP "\fBL\fR" 4
.IX Item "L"
Dump after loop optimization, to \fI\fIfile\fI.12.loop\fR.
! .IP "\fBM\fR" 4
.IX Item "M"
Dump after performing the machine dependent reorganization pass, to
\&\fI\fIfile\fI.33.mach\fR.
! .IP "\fBn\fR" 4
.IX Item "n"
Dump after register renumbering, to \fI\fIfile\fI.28.rnreg\fR.
! .IP "\fBN\fR" 4
.IX Item "N"
Dump after the register move pass, to \fI\fIfile\fI.21.regmove\fR.
! .IP "\fBo\fR" 4
.IX Item "o"
Dump after post-reload optimizations, to \fI\fIfile\fI.25.postreload\fR.
! .IP "\fBr\fR" 4
.IX Item "r"
Dump after \s-1RTL\s0 generation, to \fI\fIfile\fI.00.rtl\fR.
! .IP "\fBR\fR" 4
.IX Item "R"
Dump after the second scheduling pass, to \fI\fIfile\fI.30.sched2\fR.
! .IP "\fBs\fR" 4
.IX Item "s"
Dump after \s-1CSE\s0 (including the jump optimization that sometimes follows
\&\s-1CSE\s0), to \fI\fIfile\fI.09.cse\fR.
! .IP "\fBS\fR" 4
.IX Item "S"
Dump after the first scheduling pass, to \fI\fIfile\fI.22.sched\fR.
! .IP "\fBt\fR" 4
.IX Item "t"
Dump after the second \s-1CSE\s0 pass (including the jump optimization that
sometimes follows \s-1CSE\s0), to \fI\fIfile\fI.17.cse2\fR.
! .IP "\fBT\fR" 4
.IX Item "T"
Dump after running tracer, to \fI\fIfile\fI.16.tracer\fR.
! .IP "\fBu\fR" 4
.IX Item "u"
Dump after null pointer elimination pass to \fI\fIfile\fI.08.null\fR.
! .IP "\fBw\fR" 4
.IX Item "w"
Dump after the second flow pass, to \fI\fIfile\fI.26.flow2\fR.
! .IP "\fBW\fR" 4
.IX Item "W"
Dump after \s-1SSA\s0 conditional constant propagation, to
\&\fI\fIfile\fI.05.ssaccp\fR.
! .IP "\fBX\fR" 4
.IX Item "X"
Dump after \s-1SSA\s0 dead code elimination, to \fI\fIfile\fI.06.ssadce\fR.
! .IP "\fBz\fR" 4
.IX Item "z"
Dump after the peephole pass, to \fI\fIfile\fI.27.peephole2\fR.
! .IP "\fBa\fR" 4
.IX Item "a"
Produce all the dumps listed above.
! .IP "\fBm\fR" 4
.IX Item "m"
Print statistics on memory usage, at the end of the run, to
standard error.
! .IP "\fBp\fR" 4
.IX Item "p"
Annotate the assembler output with a comment indicating which
pattern and alternative was used. The length of each instruction is
also printed.
! .IP "\fBP\fR" 4
.IX Item "P"
Dump the \s-1RTL\s0 in the assembler output as a comment before each instruction.
Also turns on \fB\-dp\fR annotation.
! .IP "\fBv\fR" 4
.IX Item "v"
For each of the other indicated dump files (except for
\&\fI\fIfile\fI.00.rtl\fR), dump a representation of the control flow graph
suitable for viewing with \s-1VCG\s0 to \fI\fIfile\fI.\fIpass\fI.vcg\fR.
! .IP "\fBx\fR" 4
.IX Item "x"
Just generate \s-1RTL\s0 for a function instead of compiling it. Usually used
with \fBr\fR.
! .IP "\fBy\fR" 4
.IX Item "y"
Dump debugging information during parsing, to standard error.
.RE
.RS 4
.RE
! .IP "\fB\-fdump\-unnumbered\fR" 4
.IX Item "-fdump-unnumbered"
When doing debugging dumps (see \fB\-d\fR option above), suppress instruction
numbers and line number note 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\-translation\-unit\fR (C and \*(C+ only)" 4
.IX Item "-fdump-translation-unit (C and only)"
.PD 0
! .IP "\fB\-fdump\-translation\-unit\-\fR\fIoptions\fR\fB \fR(C and \*(C+ only)" 4
.IX Item "-fdump-translation-unit-options (C and only)"
.PD
Dump a representation of the tree structure for the entire translation
unit to a file. The file name is made by appending \fI.tu\fR to the
! source file name. If the \fB\-\fR\fIoptions\fR form is used, \fIoptions\fR
controls the details of the dump as described for the
! \&\fB\-fdump\-tree\fR options.
! .IP "\fB\-fdump\-class\-hierarchy\fR (\*(C+ only)" 4
.IX Item "-fdump-class-hierarchy ( only)"
.PD 0
! .IP "\fB\-fdump\-class\-hierarchy\-\fR\fIoptions\fR\fB \fR(\*(C+ only)" 4
.IX Item "-fdump-class-hierarchy-options ( only)"
.PD
Dump a representation of each class's hierarchy and virtual function
table layout to a file. The file name is made by appending \fI.class\fR
! to the source file name. If the \fB\-\fR\fIoptions\fR form is used,
\&\fIoptions\fR controls the details of the dump as described for the
! \&\fB\-fdump\-tree\fR options.
! .IP "\fB\-fdump\-tree\-\fR\fIswitch\fR\fB \fR(\*(C+ only)" 4
.IX Item "-fdump-tree-switch ( only)"
.PD 0
! .IP "\fB\-fdump\-tree\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR\fB \fR(\*(C+ only)" 4
.IX Item "-fdump-tree-switch-options ( only)"
.PD
Control the dumping at various stages of processing the intermediate
language tree to a file. The file name is generated by appending a switch
! specific suffix to the source file name. If the \fB\-\fR\fIoptions\fR
! form is used, \fIoptions\fR is a list of \fB\-\fR separated options that
control the details of the dump. Not all options are applicable to all
dumps, those which are not meaningful will be 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 "\fBslim\fR" 4
.IX Item "slim"
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.
! .IP "\fBall\fR" 4
.IX Item "all"
Turn on all options.
.RE
.RS 4
.Sp
The following tree dumps are possible:
! .IP "\fBoriginal\fR" 4
.IX Item "original"
Dump before any tree based optimization, to \fI\fIfile\fI.original\fR.
! .IP "\fBoptimized\fR" 4
.IX Item "optimized"
Dump after all tree based optimization, to \fI\fIfile\fI.optimized\fR.
! .IP "\fBinlined\fR" 4
.IX Item "inlined"
Dump after function inlining, to \fI\fIfile\fI.inlined\fR.
.RE
.RS 4
.RE
! .IP "\fB\-frandom\-seed=\fR\fIstring\fR" 4
.IX Item "-frandom-seed=string"
This option provides a seed that \s-1GCC\s0 uses when it would otherwise use
random numbers. At present, this is used to generate certain symbol names
that have to be different in every compiled file.
.Sp
The \fIstring\fR should be different for every file you compile.
! .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. This information is
*************** listing file, \fI.sched\fR or \fI.sched2
*** 2945,2965 ****
for \fIn\fR greater than nine, the output is always printed to standard
error.
.Sp
! For \fIn\fR greater than zero, \fB\-fsched-verbose\fR outputs the
same information as \fB\-dRS\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\-save-temps\fR" 4
.IX Item "-save-temps"
Store the usual ``temporary'' intermediate files permanently; place them
in the current directory and name them based on the source file. Thus,
! compiling \fIfoo.c\fR with \fB\-c \-save-temps\fR would produce files
\&\fIfoo.i\fR and \fIfoo.s\fR, as well as \fIfoo.o\fR. This creates a
preprocessed \fIfoo.i\fR output file even though the compiler now
normally uses an integrated preprocessor.
! .Ip "\fB\-time\fR" 4
.IX Item "-time"
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
--- 2949,2969 ----
for \fIn\fR greater than nine, the output is always printed to standard
error.
.Sp
! For \fIn\fR greater than zero, \fB\-fsched\-verbose\fR outputs the
same information as \fB\-dRS\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\-save\-temps\fR" 4
.IX Item "-save-temps"
Store the usual ``temporary'' intermediate files permanently; place them
in the current directory and name them based on the source file. Thus,
! compiling \fIfoo.c\fR with \fB\-c \-save\-temps\fR would produce files
\&\fIfoo.i\fR and \fIfoo.s\fR, as well as \fIfoo.o\fR. This creates a
preprocessed \fIfoo.i\fR output file even though the compiler now
normally uses an integrated preprocessor.
! .IP "\fB\-time\fR" 4
.IX Item "-time"
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
*************** sequence. For C source files, this is t
*** 2969,3002 ****
\& # cc1 0.12 0.01
\& # as 0.00 0.01
.Ve
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.
! .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@} instead of the
! \&\f(CB@samp\fB{-\fR, without spaces between multiple switches. This is supposed to
! ease shell-processing.
! .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
This is useful when you use \fB\-nostdlib\fR or \fB\-nodefaultlibs\fR
but you do want to link with \fIlibgcc.a\fR. You can do
--- 2973,3007 ----
\& # cc1 0.12 0.01
\& # 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.
! .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@} instead of the
! \&\f(CB@samp\fB{\-\fR, without spaces between multiple switches. This is supposed to
! ease shell\-processing.
! .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
This is useful when you use \fB\-nostdlib\fR or \fB\-nodefaultlibs\fR
but you do want to link with \fIlibgcc.a\fR. You can do
*************** but you do want to link with \fIlibgcc.a
*** 3004,3010 ****
.Vb 1
\& gcc -nostdlib ... `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 gcc will search\-\-\-and don't do anything else.
--- 3009,3015 ----
.Vb 1
\& gcc -nostdlib ... `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 gcc will search\-\-\-and don't do anything else.
*************** To resolve this you either need to put \
*** 3015,3029 ****
components where gcc 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 '/'.
! .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, \fB3.0\fR)\-\-\-and don't do
anything else.
! .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.)
--- 3020,3034 ----
components where gcc 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 '/'.
! .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, \fB3.0\fR)\-\-\-and don't do
anything else.
! .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.)
*************** and possibly the ability to debug the pr
*** 3045,3054 ****
.PP
Not all optimizations are controlled directly by a flag. Only
optimizations that have a flag are listed.
! .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
--- 3050,3059 ----
.PP
Not all optimizations are controlled directly by a flag. Only
optimizations that have a flag are listed.
! .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
*************** time, without performing any optimizatio
*** 3059,3078 ****
compilation time.
.Sp
\&\fB\-O\fR turns on the following optimization flags:
! \&\fB\-fdefer-pop
! \&\-fmerge-constants
! \&\-fthread-jumps
! \&\-floop-optimize
\&\-fcrossjumping
! \&\-fif-conversion
! \&\-fif-conversion2
! \&\-fdelayed-branch
! \&\-fguess-branch-probability
! \&\-fcprop-registers\fR
.Sp
! \&\fB\-O\fR also turns on \fB\-fomit-frame-pointer\fR on machines
where doing so does not interfere with debugging.
! .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. The compiler does not
--- 3064,3083 ----
compilation time.
.Sp
\&\fB\-O\fR turns on the following optimization flags:
! \&\fB\-fdefer\-pop
! \&\-fmerge\-constants
! \&\-fthread\-jumps
! \&\-floop\-optimize
\&\-fcrossjumping
! \&\-fif\-conversion
! \&\-fif\-conversion2
! \&\-fdelayed\-branch
! \&\-fguess\-branch\-probability
! \&\-fcprop\-registers\fR
.Sp
! \&\fB\-O\fR also turns on \fB\-fomit\-frame\-pointer\fR on machines
where doing so does not interfere with debugging.
! .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. The compiler does not
*************** and the performance of the generated cod
*** 3082,3147 ****
.Sp
\&\fB\-O2\fR turns on all optimization flags specified by \fB\-O\fR. It
also turns on the following optimization flags:
! \&\fB\-fforce-mem
! \&\-foptimize-sibling-calls
! \&\-fstrength-reduce
! \&\-fcse-follow-jumps \-fcse-skip-blocks
! \&\-frerun-cse-after-loop \-frerun-loop-opt
! \&\-fgcse \-fgcse-lm \-fgcse-sm
! \&\-fdelete-null-pointer-checks
! \&\-fexpensive-optimizations
\&\-fregmove
! \&\-fschedule-insns \-fschedule-insns2
! \&\-fsched-interblock \-fsched-spec
! \&\-fcaller-saves
\&\-fpeephole2
! \&\-freorder-blocks \-freorder-functions
! \&\-fstrict-aliasing
! \&\-falign-functions \-falign-jumps
! \&\-falign-loops \-falign-labels\fR
.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 \fB\-finline-functions\fR and
! \&\fB\-frename-registers\fR options.
! .Ip "\fB\-O0\fR" 4
.IX Item "-O0"
Do not optimize. This is the default.
! .Ip "\fB\-Os\fR" 4
.IX Item "-Os"
Optimize for size. \fB\-Os\fR enables all \fB\-O2\fR optimizations that
do not typically increase code size. It also performs further
optimizations designed to reduce code size.
.Sp
\&\fB\-Os\fR disables the following optimization flags:
! \&\fB\-falign-functions \-falign-jumps \-falign-loops
! \&\-falign-labels \-freorder-blocks \-fprefetch-loop-arrays\fR
.Sp
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 would be \fB\-fno-foo\fR. In the table
below, only one of the forms is listed\-\-\-the one you typically will
! use. You can figure out the other form by either removing \fBno-\fR
or adding it.
.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-default-inline\fR" 4
.IX Item "-fno-default-inline"
Do not make member functions inline by default merely because they are
defined inside the class scope (\*(C+ only). Otherwise, when you specify
\&\fB\-O\fR, member functions defined inside class scope are compiled
inline by default; i.e., you don't need to add \fBinline\fR in front of
the member function name.
! .Ip "\fB\-fno-defer-pop\fR" 4
.IX Item "-fno-defer-pop"
Always pop the arguments to each function call as soon as that function
returns. For machines which must pop arguments after a function call,
--- 3087,3152 ----
.Sp
\&\fB\-O2\fR turns on all optimization flags specified by \fB\-O\fR. It
also turns on the following optimization flags:
! \&\fB\-fforce\-mem
! \&\-foptimize\-sibling\-calls
! \&\-fstrength\-reduce
! \&\-fcse\-follow\-jumps \-fcse\-skip\-blocks
! \&\-frerun\-cse\-after\-loop \-frerun\-loop\-opt
! \&\-fgcse \-fgcse\-lm \-fgcse\-sm
! \&\-fdelete\-null\-pointer\-checks
! \&\-fexpensive\-optimizations
\&\-fregmove
! \&\-fschedule\-insns \-fschedule\-insns2
! \&\-fsched\-interblock \-fsched\-spec
! \&\-fcaller\-saves
\&\-fpeephole2
! \&\-freorder\-blocks \-freorder\-functions
! \&\-fstrict\-aliasing
! \&\-falign\-functions \-falign\-jumps
! \&\-falign\-loops \-falign\-labels\fR
.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 \fB\-finline\-functions\fR and
! \&\fB\-frename\-registers\fR options.
! .IP "\fB\-O0\fR" 4
.IX Item "-O0"
Do not optimize. This is the default.
! .IP "\fB\-Os\fR" 4
.IX Item "-Os"
Optimize for size. \fB\-Os\fR enables all \fB\-O2\fR optimizations that
do not typically increase code size. It also performs further
optimizations designed to reduce code size.
.Sp
\&\fB\-Os\fR disables the following optimization flags:
! \&\fB\-falign\-functions \-falign\-jumps \-falign\-loops
! \&\-falign\-labels \-freorder\-blocks \-fprefetch\-loop\-arrays\fR
.Sp
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 would be \fB\-fno\-foo\fR. In the table
below, only one of the forms is listed\-\-\-the one you typically will
! use. You can figure out the other form by either removing \fBno\-\fR
or adding it.
.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\-default\-inline\fR" 4
.IX Item "-fno-default-inline"
Do not make member functions inline by default merely because they are
defined inside the class scope (\*(C+ only). Otherwise, when you specify
\&\fB\-O\fR, member functions defined inside class scope are compiled
inline by default; i.e., you don't need to add \fBinline\fR in front of
the member function name.
! .IP "\fB\-fno\-defer\-pop\fR" 4
.IX Item "-fno-defer-pop"
Always pop the arguments to each function call as soon as that function
returns. For machines which must pop arguments after a function call,
*************** the compiler normally lets arguments acc
*** 3149,3169 ****
function calls and pops them all at once.
.Sp
Disabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .Ip "\fB\-fforce-mem\fR" 4
.IX Item "-fforce-mem"
Force memory operands to be copied into registers before doing
arithmetic on them. This produces better code by making all memory
references potential common subexpressions. When they are not common
subexpressions, instruction combination should eliminate the separate
! register-load.
.Sp
Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .Ip "\fB\-fforce-addr\fR" 4
.IX Item "-fforce-addr"
Force memory address constants to be copied into registers before
doing arithmetic on them. This may produce better code just as
! \&\fB\-fforce-mem\fR may.
! .Ip "\fB\-fomit-frame-pointer\fR" 4
.IX Item "-fomit-frame-pointer"
Don't keep the frame pointer in a register for functions that
don't need one. This avoids the instructions to save, set up and
--- 3154,3174 ----
function calls and pops them all at once.
.Sp
Disabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-fforce\-mem\fR" 4
.IX Item "-fforce-mem"
Force memory operands to be copied into registers before doing
arithmetic on them. This produces better code by making all memory
references potential common subexpressions. When they are not common
subexpressions, instruction combination should eliminate the separate
! register\-load.
.Sp
Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-fforce\-addr\fR" 4
.IX Item "-fforce-addr"
Force memory address constants to be copied into registers before
doing arithmetic on them. This may produce better code just as
! \&\fB\-fforce\-mem\fR may.
! .IP "\fB\-fomit\-frame\-pointer\fR" 4
.IX Item "-fomit-frame-pointer"
Don't keep the frame pointer in a register for functions that
don't need one. This avoids the instructions to save, set up and
*************** machine-description macro \f(CW\*(C`FRAM
*** 3178,3194 ****
whether a target machine supports this flag.
.Sp
Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .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\-fno-inline\fR" 4
.IX Item "-fno-inline"
Don't pay attention to the \f(CW\*(C`inline\*(C'\fR keyword. Normally this option
is used to keep the compiler from expanding any functions inline.
Note that if you are not optimizing, no functions can be expanded inline.
! .Ip "\fB\-finline-functions\fR" 4
.IX Item "-finline-functions"
Integrate all simple functions into their callers. The compiler
heuristically decides which functions are simple enough to be worth
--- 3183,3199 ----
whether a target machine supports this flag.
.Sp
Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .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\-fno\-inline\fR" 4
.IX Item "-fno-inline"
Don't pay attention to the \f(CW\*(C`inline\*(C'\fR keyword. Normally this option
is used to keep the compiler from expanding any functions inline.
Note that if you are not optimizing, no functions can be expanded inline.
! .IP "\fB\-finline\-functions\fR" 4
.IX Item "-finline-functions"
Integrate all simple functions into their callers. The compiler
heuristically decides which functions are simple enough to be worth
*************** declared \f(CW\*(C`static\*(C'\fR, then
*** 3199,3205 ****
assembler code in its own right.
.Sp
Enabled at level \fB\-O3\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 the control of this limit for functions that are explicitly marked as
--- 3204,3210 ----
assembler code in its own right.
.Sp
Enabled at level \fB\-O3\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 the control of this limit for functions that are explicitly marked as
*************** means slower programs). This option is
*** 3214,3221 ****
use inlining heavily such as those based on recursive templates with \*(C+.
.Sp
Inlining is actually controlled by a number of parameters, which may be
! specified individually by using \fB\*(--param\fR \fIname\fR\fB=\fR\fIvalue\fR.
! The \fB\-finline-limit=\fR\fIn\fR option sets some of these parameters
as follows:
.RS 4
.Sp
--- 3219,3226 ----
use inlining heavily such as those based on recursive templates with \*(C+.
.Sp
Inlining is actually controlled by a number of parameters, which may be
! specified individually by using \fB\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR.
! The \fB\-finline\-limit=\fR\fIn\fR option sets some of these parameters
as follows:
.RS 4
.Sp
*************** as follows:
*** 3234,3240 ****
.RE
.RS 4
.Sp
! Using \fB\-finline-limit=600\fR thus results in the default settings
for these parameters. See below for a documentation of the individual
parameters controlling inlining.
.Sp
--- 3239,3245 ----
.RE
.RS 4
.Sp
! Using \fB\-finline\-limit=600\fR thus results in the default settings
for these parameters. See below for a documentation of the individual
parameters controlling inlining.
.Sp
*************** abstract measurement of function's size.
*** 3243,3293 ****
of assembly instructions and as such its exact meaning might change from one
release to an another.
.RE
! .Ip "\fB\-fkeep-inline-functions\fR" 4
.IX Item "-fkeep-inline-functions"
Even if all calls to a given function are integrated, and the function
is declared \f(CW\*(C`static\*(C'\fR, nevertheless output a separate run-time
callable version of the function. This switch does not affect
\&\f(CW\*(C`extern inline\*(C'\fR functions.
! .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 the variable was 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-constants\fR to inhibit this
behavior.
.Sp
Enabled at levels \fB\-O\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 non-automatic variable to
have distinct location, so using this option will result in non-conforming
behavior.
! .Ip "\fB\-fno-branch-count-reg\fR" 4
.IX Item "-fno-branch-count-reg"
Do not use ``decrement and branch'' instructions on a count register,
but instead generate a sequence of instructions that decrement a
register, compare it against zero, 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.
.Sp
! The default is \fB\-fbranch-count-reg\fR, enabled when
! \&\fB\-fstrength-reduce\fR is enabled.
! .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.
--- 3248,3298 ----
of assembly instructions and as such its exact meaning might change from one
release to an another.
.RE
! .IP "\fB\-fkeep\-inline\-functions\fR" 4
.IX Item "-fkeep-inline-functions"
Even if all calls to a given function are integrated, and the function
is declared \f(CW\*(C`static\*(C'\fR, nevertheless output a separate run-time
callable version of the function. This switch does not affect
\&\f(CW\*(C`extern inline\*(C'\fR functions.
! .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 the variable was 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\-constants\fR to inhibit this
behavior.
.Sp
Enabled at levels \fB\-O\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 non-automatic variable to
have distinct location, so using this option will result in non-conforming
behavior.
! .IP "\fB\-fno\-branch\-count\-reg\fR" 4
.IX Item "-fno-branch-count-reg"
Do not use ``decrement and branch'' instructions on a count register,
but instead generate a sequence of instructions that decrement a
register, compare it against zero, 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.
.Sp
! The default is \fB\-fbranch\-count\-reg\fR, enabled when
! \&\fB\-fstrength\-reduce\fR is enabled.
! .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.
*************** This option results in less efficient co
*** 3296,3303 ****
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
--- 3301,3308 ----
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
*************** rely on variables going to the data sect
*** 3308,3321 ****
resulting executable can find the beginning of that section and/or make
assumptions based on that.
.Sp
! The default is \fB\-fzero-initialized-in-bss\fR.
! .Ip "\fB\-fstrength-reduce\fR" 4
.IX Item "-fstrength-reduce"
Perform the optimizations of loop strength reduction and
elimination of iteration variables.
.Sp
Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .Ip "\fB\-fthread-jumps\fR" 4
.IX Item "-fthread-jumps"
Perform optimizations where we check to see if a jump branches to a
location where another comparison subsumed by the first is found. If
--- 3313,3326 ----
resulting executable can find the beginning of that section and/or make
assumptions based on that.
.Sp
! The default is \fB\-fzero\-initialized\-in\-bss\fR.
! .IP "\fB\-fstrength\-reduce\fR" 4
.IX Item "-fstrength-reduce"
Perform the optimizations of loop strength reduction and
elimination of iteration variables.
.Sp
Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-fthread\-jumps\fR" 4
.IX Item "-fthread-jumps"
Perform optimizations where we 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
*** 3324,3330 ****
the condition is known to be true or false.
.Sp
Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .Ip "\fB\-fcse-follow-jumps\fR" 4
.IX Item "-fcse-follow-jumps"
In common subexpression elimination, scan through jump instructions
when the target of the jump is not reached by any other path. For
--- 3329,3335 ----
the condition is known to be true or false.
.Sp
Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-fcse\-follow\-jumps\fR" 4
.IX Item "-fcse-follow-jumps"
In common subexpression elimination, 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 \
*** 3333,3359 ****
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 which 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 has been
performed.
.Sp
Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .Ip "\fB\-frerun-loop-opt\fR" 4
.IX Item "-frerun-loop-opt"
Run the loop optimizer twice.
.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.
--- 3338,3364 ----
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 which 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 has been
performed.
.Sp
Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-frerun\-loop\-opt\fR" 4
.IX Item "-frerun-loop-opt"
Run the loop optimizer twice.
.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.
*************** This pass also performs global constant
*** 3361,3399 ****
\&\fINote:\fR When compiling a program using computed gotos, a \s-1GCC\s0
extension, you may get better runtime 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 will
attempt to move loads which 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.
.Sp
Enabled by default when gcse 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 will attempt to move stores out of loops.
! When used in conjunction with \fB\-fgcse-lm\fR, loops containing a load/store sequence
can be changed to a load before the loop and a store after the loop.
.Sp
Enabled by default when gcse is enabled.
! .Ip "\fB\-floop-optimize\fR" 4
.IX Item "-floop-optimize"
Perform loop optimizations: move constant expressions out of loops, simplify
exit test conditions and optionally do strength-reduction and loop unrolling as
well.
.Sp
Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .Ip "\fB\-fcrossjumping\fR" 4
.IX Item "-fcrossjumping"
Perform cross-jumping transformation. This transformation unifies equivalent code and save code size. The
! resulting code may or may not perform better than without cross-jumping.
.Sp
Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .Ip "\fB\-fif-conversion\fR" 4
.IX Item "-fif-conversion"
Attempt to transform conditional jumps into branch-less equivalents. This
include use of conditional moves, min, max, set flags and abs instructions, and
--- 3366,3404 ----
\&\fINote:\fR When compiling a program using computed gotos, a \s-1GCC\s0
extension, you may get better runtime 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 will
attempt to move loads which 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.
.Sp
Enabled by default when gcse 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 will attempt to move stores out of loops.
! When used in conjunction with \fB\-fgcse\-lm\fR, loops containing a load/store sequence
can be changed to a load before the loop and a store after the loop.
.Sp
Enabled by default when gcse is enabled.
! .IP "\fB\-floop\-optimize\fR" 4
.IX Item "-floop-optimize"
Perform loop optimizations: move constant expressions out of loops, simplify
exit test conditions and optionally do strength-reduction and loop unrolling as
well.
.Sp
Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-fcrossjumping\fR" 4
.IX Item "-fcrossjumping"
Perform cross-jumping transformation. This transformation unifies equivalent code and save code size. The
! resulting code may or may not perform better than without cross\-jumping.
.Sp
Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-fif\-conversion\fR" 4
.IX Item "-fif-conversion"
Attempt to transform conditional jumps into branch-less equivalents. This
include use of conditional moves, min, max, set flags and abs instructions, and
*************** some tricks doable by standard arithmeti
*** 3401,3413 ****
on chips where it is available is controlled by \f(CW\*(C`if\-conversion2\*(C'\fR.
.Sp
Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\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\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .Ip "\fB\-fdelete-null-pointer-checks\fR" 4
.IX Item "-fdelete-null-pointer-checks"
Use global dataflow analysis to identify and eliminate useless checks
for null pointers. The compiler assumes that dereferencing a null
--- 3406,3418 ----
on chips where it is available is controlled by \f(CW\*(C`if\-conversion2\*(C'\fR.
.Sp
Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\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\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-fdelete\-null\-pointer\-checks\fR" 4
.IX Item "-fdelete-null-pointer-checks"
Use global dataflow analysis to identify and eliminate useless checks
for null pointers. The compiler assumes that dereferencing a null
*************** it has already been dereferenced, it can
*** 3416,3434 ****
.Sp
In some environments, this assumption is not true, and programs can
safely dereference null pointers. Use
! \&\fB\-fno-delete-null-pointer-checks\fR to disable this optimization
for programs which depend on that behavior.
.Sp
Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .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\-foptimize-register-move\fR" 4
.IX Item "-foptimize-register-move"
.PD 0
! .Ip "\fB\-fregmove\fR" 4
.IX Item "-fregmove"
.PD
Attempt to reassign register numbers in move instructions and as
--- 3421,3439 ----
.Sp
In some environments, this assumption is not true, and programs can
safely dereference null pointers. Use
! \&\fB\-fno\-delete\-null\-pointer\-checks\fR to disable this optimization
for programs which depend on that behavior.
.Sp
Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .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\-foptimize\-register\-move\fR" 4
.IX Item "-foptimize-register-move"
.PD 0
! .IP "\fB\-fregmove\fR" 4
.IX Item "-fregmove"
.PD
Attempt to reassign register numbers in move instructions and as
*************** operands of other simple instructions in
*** 3436,3453 ****
register tying. This is especially helpful on machines with two-operand
instructions.
.Sp
! Note \fB\-fregmove\fR and \fB\-foptimize-register-move\fR are the same
optimization.
.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.
.Sp
Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\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
--- 3441,3458 ----
register tying. This is especially helpful on machines with two-operand
instructions.
.Sp
! Note \fB\-fregmove\fR and \fB\-foptimize\-register\-move\fR are the same
optimization.
.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.
.Sp
Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\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
*************** by allowing other instructions to be iss
*** 3456,3490 ****
or floating point instruction is required.
.Sp
Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\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 relatively small number of
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"
Don't schedule instructions across basic blocks. This is normally
enabled by default 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"
Don't allow speculative motion of non-load instructions. This is normally
enabled by default when scheduling before register allocation, i.e.
! with \fB\-fschedule-insns\fR or at \fB\-O2\fR or higher.
! .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\-fcaller-saves\fR" 4
.IX Item "-fcaller-saves"
Enable values to be allocated in registers that will be clobbered by
function calls, by emitting extra instructions to save and restore the
--- 3461,3495 ----
or floating point instruction is required.
.Sp
Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\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 relatively small number of
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"
Don't schedule instructions across basic blocks. This is normally
enabled by default 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"
Don't allow speculative motion of non-load instructions. This is normally
enabled by default when scheduling before register allocation, i.e.
! with \fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
! .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\-fcaller\-saves\fR" 4
.IX Item "-fcaller-saves"
Enable values to be allocated in registers that will be clobbered by
function calls, by emitting extra instructions to save and restore the
*************** This option is always enabled by default
*** 3495,3511 ****
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\-fmove-all-movables\fR" 4
.IX Item "-fmove-all-movables"
Forces all invariant computations in loops to be moved
outside the loop.
! .Ip "\fB\-freduce-all-givs\fR" 4
.IX Item "-freduce-all-givs"
Forces all general-induction variables in loops to be
! strength-reduced.
.Sp
\&\fINote:\fR When compiling programs written in Fortran,
! \&\fB\-fmove-all-movables\fR and \fB\-freduce-all-givs\fR are enabled
by default when you use the optimizer.
.Sp
These options may generate better or worse code; results are highly
--- 3500,3516 ----
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\-fmove\-all\-movables\fR" 4
.IX Item "-fmove-all-movables"
Forces all invariant computations in loops to be moved
outside the loop.
! .IP "\fB\-freduce\-all\-givs\fR" 4
.IX Item "-freduce-all-givs"
Forces all general-induction variables in loops to be
! strength\-reduced.
.Sp
\&\fINote:\fR When compiling programs written in Fortran,
! \&\fB\-fmove\-all\-movables\fR and \fB\-freduce\-all\-givs\fR are enabled
by default when you use the optimizer.
.Sp
These options may generate better or worse code; results are highly
*************** know how use of these options affects
*** 3520,3567 ****
the performance of your production code.
We're very interested in code that runs \fIslower\fR
when these options are \fIenabled\fR.
! .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\-fbranch-probabilities\fR" 4
! .IX Item "-fbranch-probabilities"
! .PD 0
! .Ip "\fB\-fno-guess-branch-probability\fR" 4
.IX Item "-fno-guess-branch-probability"
- .PD
Do not guess branch probabilities using a randomized model.
.Sp
Sometimes gcc will opt to use a randomized model to guess branch
probabilities, when none are available from either profiling feedback
! (\fB\-fprofile-arcs\fR) or \fB_\|_builtin_expect\fR. This means that
different runs of the compiler on the same program may produce different
object code.
.Sp
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.
.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\-O2\fR, \fB\-O3\fR.
! .Ip "\fB\-freorder-functions\fR" 4
.IX Item "-freorder-functions"
Reorder basic blocks in the compiled function in order to reduce number of
taken branches and improve code locality. This is implemented by using special
--- 3525,3568 ----
the performance of your production code.
We're very interested in code that runs \fIslower\fR
when these options are \fIenabled\fR.
! .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 a randomized model.
.Sp
Sometimes gcc will opt to use a randomized model to guess branch
probabilities, when none are available from either profiling feedback
! (\fB\-fprofile\-arcs\fR) or \fB_\|_builtin_expect\fR. This means that
different runs of the compiler on the same program may produce different
object code.
.Sp
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.
.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\-O2\fR, \fB\-O3\fR.
! .IP "\fB\-freorder\-functions\fR" 4
.IX Item "-freorder-functions"
Reorder basic blocks in the compiled function in order to reduce number of
taken branches and improve code locality. This is implemented by using special
*************** the linker so object file format must su
*** 3571,3580 ****
place them in a reasonable way.
.Sp
Also profile feedback must be available in to make this option effective. See
! \&\fB\-fprofile-arcs\fR for details.
.Sp
Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .Ip "\fB\-fstrict-aliasing\fR" 4
.IX Item "-fstrict-aliasing"
Allows the compiler to assume the strictest aliasing rules applicable to
the language being compiled. For C (and \*(C+), this activates
--- 3572,3581 ----
place them in a reasonable way.
.Sp
Also profile feedback must be available in to make this option effective. See
! \&\fB\-fprofile\-arcs\fR for details.
.Sp
Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
! .IP "\fB\-fstrict\-aliasing\fR" 4
.IX Item "-fstrict-aliasing"
Allows the compiler to assume the strictest aliasing rules applicable to
the language being compiled. For C (and \*(C+), this activates
*************** Pay special attention to code like this:
*** 3593,3598 ****
--- 3594,3600 ----
\& double d;
\& };
.Ve
+ .Sp
.Vb 5
\& int f() {
\& a_union t;
*************** Pay special attention to code like this:
*** 3600,3608 ****
\& return t.i;
\& }
.Ve
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 will work as
expected. However, this code might not:
.Sp
--- 3602,3611 ----
\& return t.i;
\& }
.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 will work as
expected. However, this code might not:
.Sp
*************** expected. However, this code might not:
*** 3615,3620 ****
--- 3618,3624 ----
\& return *ip;
\& }
.Ve
+ .Sp
Every language that wishes to perform language-specific alias analysis
should define a function that computes, given an \f(CW\*(C`tree\*(C'\fR
node, an alias set for the node. Nodes in different alias sets are not
*************** allowed to alias. For an example, see t
*** 3622,3640 ****
\&\f(CW\*(C`c_get_alias_set\*(C'\fR.
.Sp
Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\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"
.PD
Align the start of functions to the next power-of-two greater than
\&\fIn\fR, skipping up to \fIn\fR bytes. For instance,
! \&\fB\-falign-functions=32\fR aligns functions to the next 32\-byte
! boundary, but \fB\-falign-functions=24\fR would align to the next
32\-byte boundary only if this can be done by skipping 23 bytes or less.
.Sp
! \&\fB\-fno-align-functions\fR and \fB\-falign-functions=1\fR are
equivalent and mean that functions will not be aligned.
.Sp
Some assemblers only support this flag when \fIn\fR is a power of two;
--- 3626,3644 ----
\&\f(CW\*(C`c_get_alias_set\*(C'\fR.
.Sp
Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\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"
.PD
Align the start of functions to the next power-of-two greater than
\&\fIn\fR, skipping up to \fIn\fR bytes. For instance,
! \&\fB\-falign\-functions=32\fR aligns functions to the next 32\-byte
! boundary, but \fB\-falign\-functions=24\fR would align to the next
32\-byte boundary only if this can be done by skipping 23 bytes or less.
.Sp
! \&\fB\-fno\-align\-functions\fR and \fB\-falign\-functions=1\fR are
equivalent and mean that functions will not be aligned.
.Sp
Some assemblers only support this flag when \fIn\fR is a power of two;
*************** in that case, it is rounded up.
*** 3643,3704 ****
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-labels\fR" 4
.IX Item "-falign-labels"
.PD 0
! .Ip "\fB\-falign-labels=\fR\fIn\fR" 4
.IX Item "-falign-labels=n"
.PD
Align all branch targets to a power-of-two boundary, skipping up to
! \&\fIn\fR bytes like \fB\-falign-functions\fR. This option can easily
make code slower, because it must insert dummy operations for when the
branch target is reached in the usual flow of the code.
.Sp
! \&\fB\-fno-align-labels\fR and \fB\-falign-labels=1\fR are
equivalent and mean that labels will not be aligned.
.Sp
! 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.
.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"
.PD
Align loops to a power-of-two boundary, skipping up to \fIn\fR bytes
! like \fB\-falign-functions\fR. The hope is that the loop will be
executed many times, which will make up for any execution of the dummy
operations.
.Sp
! \&\fB\-fno-align-loops\fR and \fB\-falign-loops=1\fR are
equivalent and mean that loops will not be aligned.
.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"
.PD
Align branch targets to a power-of-two boundary, for branch targets
where the targets can only be reached by jumping, skipping up to \fIn\fR
! bytes like \fB\-falign-functions\fR. In this case, no dummy operations
need be executed.
.Sp
! \&\fB\-fno-align-jumps\fR and \fB\-falign-jumps=1\fR are
equivalent and mean that loops will not be aligned.
.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\-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
--- 3647,3708 ----
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\-labels\fR" 4
.IX Item "-falign-labels"
.PD 0
! .IP "\fB\-falign\-labels=\fR\fIn\fR" 4
.IX Item "-falign-labels=n"
.PD
Align all branch targets to a power-of-two boundary, skipping up to
! \&\fIn\fR bytes like \fB\-falign\-functions\fR. This option can easily
make code slower, because it must insert dummy operations for when the
branch target is reached in the usual flow of the code.
.Sp
! \&\fB\-fno\-align\-labels\fR and \fB\-falign\-labels=1\fR are
equivalent and mean that labels will not be aligned.
.Sp
! 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.
.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"
.PD
Align loops to a power-of-two boundary, skipping up to \fIn\fR bytes
! like \fB\-falign\-functions\fR. The hope is that the loop will be
executed many times, which will make up for any execution of the dummy
operations.
.Sp
! \&\fB\-fno\-align\-loops\fR and \fB\-falign\-loops=1\fR are
equivalent and mean that loops will not be aligned.
.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"
.PD
Align branch targets to a power-of-two boundary, for branch targets
where the targets can only be reached by jumping, skipping up to \fIn\fR
! bytes like \fB\-falign\-functions\fR. In this case, no dummy operations
need be executed.
.Sp
! \&\fB\-fno\-align\-jumps\fR and \fB\-falign\-jumps=1\fR are
equivalent and mean that loops will not be aligned.
.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\-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
*************** make debugging impossible, since variabl
*** 3707,3713 ****
a ``home register''.
.Sp
Enabled at levels \fB\-O3\fR.
! .Ip "\fB\-fno-cprop-registers\fR" 4
.IX Item "-fno-cprop-registers"
After register allocation and post-register allocation instruction splitting,
we perform a copy-propagation pass to try to reduce scheduling dependencies
--- 3711,3717 ----
a ``home register''.
.Sp
Enabled at levels \fB\-O3\fR.
! .IP "\fB\-fno\-cprop\-registers\fR" 4
.IX Item "-fno-cprop-registers"
After register allocation and post-register allocation instruction splitting,
we perform a copy-propagation pass to try to reduce scheduling dependencies
*************** Disabled at levels \fB\-O\fR, \fB\-O2\fR
*** 3718,3724 ****
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
--- 3722,3728 ----
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
*************** the 68000 where the floating registers (
*** 3729,3739 ****
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\-ffast-math\fR" 4
.IX Item "-ffast-math"
! Sets \fB\-fno-math-errno\fR, \fB\-funsafe-math-optimizations\fR, \fB\-fno-trapping-math\fR, \fB\-ffinite-math-only\fR and \fB\-fno-signaling-nans\fR.
.Sp
This option causes the preprocessor macro \f(CW\*(C`_\|_FAST_MATH_\|_\*(C'\fR to be defined.
.Sp
--- 3733,3743 ----
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\-ffast\-math\fR" 4
.IX Item "-ffast-math"
! Sets \fB\-fno\-math\-errno\fR, \fB\-funsafe\-math\-optimizations\fR, \fB\-fno\-trapping\-math\fR, \fB\-ffinite\-math\-only\fR and \fB\-fno\-signaling\-nans\fR.
.Sp
This option causes the preprocessor macro \f(CW\*(C`_\|_FAST_MATH_\|_\*(C'\fR to be defined.
.Sp
*************** This option should never be turned on by
*** 3741,3747 ****
it can result in incorrect output for programs which depend on
an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
math functions.
! .Ip "\fB\-fno-math-errno\fR" 4
.IX Item "-fno-math-errno"
Do not set \s-1ERRNO\s0 after calling math functions that are executed
with a single instruction, e.g., sqrt. A program that relies on
--- 3745,3751 ----
it can result in incorrect output for programs which depend on
an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
math functions.
! .IP "\fB\-fno\-math\-errno\fR" 4
.IX Item "-fno-math-errno"
Do not set \s-1ERRNO\s0 after calling math functions that are executed
with a single instruction, e.g., sqrt. A program that relies on
*************** it can result in incorrect output for pr
*** 3753,3764 ****
an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
math functions.
.Sp
! The default is \fB\-fmath-errno\fR.
! .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
--- 3757,3768 ----
an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
math functions.
.Sp
! The default is \fB\-fmath\-errno\fR.
! .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
*************** it can result in incorrect output for pr
*** 3767,3774 ****
an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
math functions.
.Sp
! The default is \fB\-fno-unsafe-math-optimizations\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.
--- 3771,3778 ----
an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
math functions.
.Sp
! The default is \fB\-fno\-unsafe\-math\-optimizations\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.
*************** This option should never be turned on by
*** 3777,3812 ****
it can result in incorrect output for programs which depend on
an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications.
.Sp
! The default is \fB\-fno-finite-math-only\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 implies
! \&\fB\-fno-signaling-nans\fR. Setting this option may allow faster
! code if one relies on ``non-stop'' \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 which 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.
! .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
This option causes the preprocessor macro \f(CW\*(C`_\|_SUPPORT_SNAN_\|_\*(C'\fR to
be defined.
.Sp
! 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\-fsingle-precision-constant\fR" 4
.IX Item "-fsingle-precision-constant"
Treat floating point constant as single precision constant instead of
implicitly converting it to double precision constant.
--- 3781,3816 ----
it can result in incorrect output for programs which depend on
an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications.
.Sp
! The default is \fB\-fno\-finite\-math\-only\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 implies
! \&\fB\-fno\-signaling\-nans\fR. Setting this option may allow faster
! code if one relies on ``non\-stop'' \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 which 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.
! .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
This option causes the preprocessor macro \f(CW\*(C`_\|_SUPPORT_SNAN_\|_\*(C'\fR to
be defined.
.Sp
! 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\-fsingle\-precision\-constant\fR" 4
.IX Item "-fsingle-precision-constant"
Treat floating point constant as single precision constant instead of
implicitly converting it to double precision constant.
*************** implicitly converting it to double preci
*** 3814,3868 ****
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 the program
! compiled with \fB\-fprofile-arcs\fR exits it saves arc execution
counts to a file called \fI\fIsourcename\fI.da\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.
.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.c\fR, instead of guessing which path a
branch is mostly to take, the \fB\s-1REG_BR_PROB\s0\fR values are used to
exactly determine which path is taken more often.
! .Ip "\fB\-fnew-ra\fR" 4
.IX Item "-fnew-ra"
Use a graph coloring register allocator. Currently this option is meant
only for testing. Users should not specify this option, since it is not
yet ready for production use.
! .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
better job.
! .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 both
! \&\fB\-fstrength-reduce\fR and \fB\-frerun-cse-after-loop\fR. This
option makes code larger, and may or may not make it run faster.
! .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\-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.
.Sp
Disabled at level \fB\-Os\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
--- 3818,3872 ----
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 the program
! compiled with \fB\-fprofile\-arcs\fR exits it saves arc execution
counts to a file called \fI\fIsourcename\fI.da\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.
.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.c\fR, instead of guessing which path a
branch is mostly to take, the \fB\s-1REG_BR_PROB\s0\fR values are used to
exactly determine which path is taken more often.
! .IP "\fB\-fnew\-ra\fR" 4
.IX Item "-fnew-ra"
Use a graph coloring register allocator. Currently this option is meant
only for testing. Users should not specify this option, since it is not
yet ready for production use.
! .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
better job.
! .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 both
! \&\fB\-fstrength\-reduce\fR and \fB\-frerun\-cse\-after\-loop\fR. This
option makes code larger, and may or may not make it run faster.
! .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\-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.
.Sp
Disabled at level \fB\-Os\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
*************** create larger object and executable file
*** 3882,3908 ****
You will not be able to use \f(CW\*(C`gprof\*(C'\fR on all systems if you
specify this option and you may have problems with debugging if
you specify both this option and \fB\-g\fR.
! .Ip "\fB\-fssa\fR" 4
.IX Item "-fssa"
Perform optimizations in static single assignment form. Each function's
flow graph is translated into \s-1SSA\s0 form, optimizations are performed, and
the flow graph is translated back from \s-1SSA\s0 form. Users should not
specify this option, since it is not yet ready for production use.
! .Ip "\fB\-fssa-ccp\fR" 4
.IX Item "-fssa-ccp"
Perform Sparse Conditional Constant Propagation in \s-1SSA\s0 form. Requires
\&\fB\-fssa\fR. Like \fB\-fssa\fR, this is an experimental feature.
! .Ip "\fB\-fssa-dce\fR" 4
.IX Item "-fssa-dce"
Perform aggressive dead-code elimination in \s-1SSA\s0 form. Requires \fB\-fssa\fR.
Like \fB\-fssa\fR, this is an experimental feature.
! .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 will not inline functions
that contain more that a certain number of instructions. You can
control some of these constants on the command-line using the
! \&\fB\*(--param\fR option.
.Sp
The names of specific parameters, and the meaning of the values, are
tied to the internals of the compiler, and are subject to change
--- 3886,3912 ----
You will not be able to use \f(CW\*(C`gprof\*(C'\fR on all systems if you
specify this option and you may have problems with debugging if
you specify both this option and \fB\-g\fR.
! .IP "\fB\-fssa\fR" 4
.IX Item "-fssa"
Perform optimizations in static single assignment form. Each function's
flow graph is translated into \s-1SSA\s0 form, optimizations are performed, and
the flow graph is translated back from \s-1SSA\s0 form. Users should not
specify this option, since it is not yet ready for production use.
! .IP "\fB\-fssa\-ccp\fR" 4
.IX Item "-fssa-ccp"
Perform Sparse Conditional Constant Propagation in \s-1SSA\s0 form. Requires
\&\fB\-fssa\fR. Like \fB\-fssa\fR, this is an experimental feature.
! .IP "\fB\-fssa\-dce\fR" 4
.IX Item "-fssa-dce"
Perform aggressive dead-code elimination in \s-1SSA\s0 form. Requires \fB\-fssa\fR.
Like \fB\-fssa\fR, this is an experimental feature.
! .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 will not inline functions
that contain more that a certain number of instructions. You can
control some of these constants on the command-line using the
! \&\fB\-\-param\fR option.
.Sp
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.
*** 3911,3924 ****
In each case, the \fIvalue\fR is an integer. The allowable choices for
\&\fIname\fR are given in the following table:
.RS 4
! .Ip "\fBmax-crossjump-edges\fR" 4
.IX Item "max-crossjump-edges"
The maximum number of incoming edges to consider for crossjumping.
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 compile time increase with
probably small improvement in executable size.
! .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
--- 3915,3928 ----
In each case, the \fIvalue\fR is an integer. The allowable choices for
\&\fIname\fR are given in the following table:
.RS 4
! .IP "\fBmax-crossjump-edges\fR" 4
.IX Item "max-crossjump-edges"
The maximum number of incoming edges to consider for crossjumping.
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 compile time increase with
probably small improvement in executable size.
! .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 is searched, the time savin
*** 3926,3932 ****
will be minimal so stop searching. Increasing values mean more
aggressive optimization, making the compile time increase with probably
small improvement in executable run 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
--- 3930,3936 ----
will be minimal so stop searching. Increasing values mean more
aggressive optimization, making the compile time increase with probably
small improvement in executable run 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 arbitraril
*** 3934,3955 ****
aggressive optimization, increasing the compile 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 that will be allocated in
order to perform the global common subexpression elimination
optimization. If more memory than specified is required, the
optimization will not be done.
! .Ip "\fBmax-gcse-passes\fR" 4
.IX Item "max-gcse-passes"
The maximum number of passes of \s-1GCSE\s0 to run.
! .Ip "\fBmax-pending-list-length\fR" 4
.IX Item "max-pending-list-length"
The maximum number of pending dependencies scheduling will allow
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-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's
--- 3938,3959 ----
aggressive optimization, increasing the compile 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 that will be allocated in
order to perform the global common subexpression elimination
optimization. If more memory than specified is required, the
optimization will not be done.
! .IP "\fBmax-gcse-passes\fR" 4
.IX Item "max-gcse-passes"
The maximum number of passes of \s-1GCSE\s0 to run.
! .IP "\fBmax-pending-list-length\fR" 4
.IX Item "max-pending-list-length"
The maximum number of pending dependencies scheduling will allow
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-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's
*************** internal representation) in a single fun
*** 3957,3971 ****
will consider for inlining. This only affects functions declared
inline and methods implemented in a class declaration (\*(C+).
The default value is 300.
! .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 will be investigated. To those functions, a different
(more restrictive) limit compared to functions declared inline can
be applied.
The default value is 300.
! .Ip "\fBmax-inline-insns\fR" 4
.IX Item "max-inline-insns"
The tree inliner does decrease the allowable size for single functions
to be inlined after we already inlined the number of instructions
--- 3961,3975 ----
will consider for inlining. This only affects functions declared
inline and methods implemented in a class declaration (\*(C+).
The default value is 300.
! .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 will be investigated. To those functions, a different
(more restrictive) limit compared to functions declared inline can
be applied.
The default value is 300.
! .IP "\fBmax-inline-insns\fR" 4
.IX Item "max-inline-insns"
The tree inliner does decrease the allowable size for single functions
to be inlined after we already inlined the number of instructions
*************** compile-time resource (\s-1CPU\s0 time,
*** 3976,4018 ****
larger binaries. Very high values are not advisable, as too large
binaries may adversely affect runtime performance.
The default value is 600.
! .Ip "\fBmax-inline-slope\fR" 4
.IX Item "max-inline-slope"
After exceeding the maximum number of inlined instructions by repeated
inlining, a linear function is used to decrease the allowable size
for single functions. The slope of that function is the negative
reciprocal of the number specified here.
The default value is 32.
! .Ip "\fBmin-inline-insns\fR" 4
.IX Item "min-inline-insns"
The repeated inlining is throttled more and more by the linear function
after exceeding the limit. To avoid too much throttling, a minimum for
this function is specified here to allow repeated inlining for very small
functions even when a lot of repeated inlining already has been done.
The default value is 130.
! .Ip "\fBmax-inline-insns-rtl\fR" 4
.IX Item "max-inline-insns-rtl"
For languages that use the \s-1RTL\s0 inliner (this happens at a later stage
than tree inlining), you can set the maximum allowable size (counted
in \s-1RTL\s0 instructions) for the \s-1RTL\s0 inliner with this parameter.
The default value is 600.
! .Ip "\fBmax-unrolled-insns\fR" 4
.IX Item "max-unrolled-insns"
The maximum number of instructions that a loop should have if that loop
is unrolled, and if the loop is unrolled, it determines how many times
the loop code is unrolled.
! .Ip "\fBhot-bb-count-fraction\fR" 4
.IX Item "hot-bb-count-fraction"
Select fraction of the maximal count of repetitions of basic block in program
given basic block needs to have to be considered hot.
! .Ip "\fBhot-bb-frequency-fraction\fR" 4
.IX Item "hot-bb-frequency-fraction"
Select fraction of the maximal frequency of executions of basic block in
function given basic block needs to have to be considered hot
! .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
--- 3980,4022 ----
larger binaries. Very high values are not advisable, as too large
binaries may adversely affect runtime performance.
The default value is 600.
! .IP "\fBmax-inline-slope\fR" 4
.IX Item "max-inline-slope"
After exceeding the maximum number of inlined instructions by repeated
inlining, a linear function is used to decrease the allowable size
for single functions. The slope of that function is the negative
reciprocal of the number specified here.
The default value is 32.
! .IP "\fBmin-inline-insns\fR" 4
.IX Item "min-inline-insns"
The repeated inlining is throttled more and more by the linear function
after exceeding the limit. To avoid too much throttling, a minimum for
this function is specified here to allow repeated inlining for very small
functions even when a lot of repeated inlining already has been done.
The default value is 130.
! .IP "\fBmax-inline-insns-rtl\fR" 4
.IX Item "max-inline-insns-rtl"
For languages that use the \s-1RTL\s0 inliner (this happens at a later stage
than tree inlining), you can set the maximum allowable size (counted
in \s-1RTL\s0 instructions) for the \s-1RTL\s0 inliner with this parameter.
The default value is 600.
! .IP "\fBmax-unrolled-insns\fR" 4
.IX Item "max-unrolled-insns"
The maximum number of instructions that a loop should have if that loop
is unrolled, and if the loop is unrolled, it determines how many times
the loop code is unrolled.
! .IP "\fBhot-bb-count-fraction\fR" 4
.IX Item "hot-bb-count-fraction"
Select fraction of the maximal count of repetitions of basic block in program
given basic block needs to have to be considered hot.
! .IP "\fBhot-bb-frequency-fraction\fR" 4
.IX Item "hot-bb-frequency-fraction"
Select fraction of the maximal frequency of executions of basic block in
function given basic block needs to have to be considered hot
! .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
*************** expansion.
*** 4022,4041 ****
The \fBtracer-dynamic-coverage-feedback\fR 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
rather hokey argument, as most of the duplicates will be 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-ratio\fR" 4
.IX Item "tracer-min-branch-ratio"
.PD 0
! .Ip "\fBtracer-min-branch-ratio-feedback\fR" 4
.IX Item "tracer-min-branch-ratio-feedback"
.PD
Stop forward growth if the best edge do have probability lower than this
--- 4026,4045 ----
The \fBtracer-dynamic-coverage-feedback\fR 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
rather hokey argument, as most of the duplicates will be 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-ratio\fR" 4
.IX Item "tracer-min-branch-ratio"
.PD 0
! .IP "\fBtracer-min-branch-ratio-feedback\fR" 4
.IX Item "tracer-min-branch-ratio-feedback"
.PD
Stop forward growth if the best edge do have probability lower than this
*************** Similarly to \fBtracer-dynamic-coverage\
*** 4045,4051 ****
compilation for profile feedback and one for compilation without. The value
for compilation with profile feedback needs to be more conservative (higher) in
order to make tracer effective.
! .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
--- 4049,4055 ----
compilation for profile feedback and one for compilation without. The value
for compilation with profile feedback needs to be more conservative (higher) in
order to make tracer effective.
! .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
*************** bound of 30% is used. Setting this para
*** 4061,4067 ****
\&\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
--- 4065,4071 ----
\&\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 the compiler driver before being pass
*** 4099,4108 ****
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\-D\fR \fIname\fR" 4
.IX Item "-D name"
! Predefine \fIname\fR as a macro, with definition \f(CW\*(C`1\*(C'\fR.
! .Ip "\fB\-D\fR \fIname\fR\fB=\fR\fIdefinition\fR" 4
.IX Item "-D name=definition"
Predefine \fIname\fR as a macro, with definition \fIdefinition\fR.
There are no restrictions on the contents of \fIdefinition\fR, but if
--- 4103,4112 ----
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\-D\fR \fIname\fR" 4
.IX Item "-D name"
! Predefine \fIname\fR as a macro, with definition \f(CW1\fR.
! .IP "\fB\-D\fR \fIname\fR\fB=\fR\fIdefinition\fR" 4
.IX Item "-D name=definition"
Predefine \fIname\fR as a macro, with definition \fIdefinition\fR.
There are no restrictions on the contents of \fIdefinition\fR, but if
*************** to quote the option. With \fBsh\fR and
*** 4120,4134 ****
are given on the command line. All \fB\-imacros\fR \fIfile\fR and
\&\fB\-include\fR \fIfile\fR options are processed after all
\&\fB\-D\fR and \fB\-U\fR options.
! .Ip "\fB\-U\fR \fIname\fR" 4
.IX Item "-U name"
Cancel any previous definition of \fIname\fR, either built in or
provided with a \fB\-D\fR option.
! .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\-I\fR \fIdir\fR" 4
.IX Item "-I dir"
Add the directory \fIdir\fR to the list of directories to be searched
for header files.
--- 4124,4138 ----
are given on the command line. All \fB\-imacros\fR \fIfile\fR and
\&\fB\-include\fR \fIfile\fR options are processed after all
\&\fB\-D\fR and \fB\-U\fR options.
! .IP "\fB\-U\fR \fIname\fR" 4
.IX Item "-U name"
Cancel any previous definition of \fIname\fR, either built in or
provided with a \fB\-D\fR option.
! .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\-I\fR \fIdir\fR" 4
.IX Item "-I dir"
Add the directory \fIdir\fR to the list of directories to be searched
for header files.
*************** system include directory, the option is
*** 4138,4184 ****
default search order for system directories and the special treatment
of system headers are not defeated
\&.
! .Ip "\fB\-o\fR \fIfile\fR" 4
.IX Item "-o file"
Write output to \fIfile\fR. This is the same as specifying \fIfile\fR
as the second non-option argument to \fBcpp\fR. \fBgcc\fR has a
different interpretation of a second non-option argument, so you must
use \fB\-o\fR to specify the output file.
! .Ip "\fB\-Wall\fR" 4
.IX Item "-Wall"
Turns on all optional warnings which are desirable for normal code. At
present this is \fB\-Wcomment\fR and \fB\-Wtrigraphs\fR. Note that
many of the preprocessor's warnings are on by default and have no
options to control them.
! .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.
(Both forms have the same effect.)
! .Ip "\fB\-Wtrigraphs\fR" 4
.IX Item "-Wtrigraphs"
Warn if any trigraphs are encountered. This option used to take effect
only if \fB\-trigraphs\fR was also specified, but now works
independently. Warnings are not given for trigraphs within comments, as
they do not affect the meaning of the program.
! .Ip "\fB\-Wtraditional\fR" 4
.IX Item "-Wtraditional"
Warn about certain constructs that behave differently in traditional and
\&\s-1ISO\s0 C. Also warn about \s-1ISO\s0 C constructs that have no traditional C
equivalent, and problematic constructs which should be avoided.
! .Ip "\fB\-Wimport\fR" 4
.IX Item "-Wimport"
Warn the first time \fB#import\fR is used.
! .Ip "\fB\-Wundef\fR" 4
.IX Item "-Wundef"
Warn whenever an identifier which is not a macro is encountered in an
\&\fB#if\fR directive, outside of \fBdefined\fR. Such identifiers are
replaced with zero.
! .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.
--- 4142,4188 ----
default search order for system directories and the special treatment
of system headers are not defeated
\&.
! .IP "\fB\-o\fR \fIfile\fR" 4
.IX Item "-o file"
Write output to \fIfile\fR. This is the same as specifying \fIfile\fR
as the second non-option argument to \fBcpp\fR. \fBgcc\fR has a
different interpretation of a second non-option argument, so you must
use \fB\-o\fR to specify the output file.
! .IP "\fB\-Wall\fR" 4
.IX Item "-Wall"
Turns on all optional warnings which are desirable for normal code. At
present this is \fB\-Wcomment\fR and \fB\-Wtrigraphs\fR. Note that
many of the preprocessor's warnings are on by default and have no
options to control them.
! .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.
(Both forms have the same effect.)
! .IP "\fB\-Wtrigraphs\fR" 4
.IX Item "-Wtrigraphs"
Warn if any trigraphs are encountered. This option used to take effect
only if \fB\-trigraphs\fR was also specified, but now works
independently. Warnings are not given for trigraphs within comments, as
they do not affect the meaning of the program.
! .IP "\fB\-Wtraditional\fR" 4
.IX Item "-Wtraditional"
Warn about certain constructs that behave differently in traditional and
\&\s-1ISO\s0 C. Also warn about \s-1ISO\s0 C constructs that have no traditional C
equivalent, and problematic constructs which should be avoided.
! .IP "\fB\-Wimport\fR" 4
.IX Item "-Wimport"
Warn the first time \fB#import\fR is used.
! .IP "\fB\-Wundef\fR" 4
.IX Item "-Wundef"
Warn whenever an identifier which is not a macro is encountered in an
\&\fB#if\fR directive, outside of \fBdefined\fR. Such identifiers are
replaced with zero.
! .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.
*************** Alternatively, you could provide a dummy
*** 4198,4204 ****
\& #if defined the_macro_causing_the_warning
\& #endif
.Ve
! .Ip "\fB\-Wendif-labels\fR" 4
.IX Item "-Wendif-labels"
Warn whenever an \fB#else\fR or an \fB#endif\fR are followed by text.
This usually happens in code of the form
--- 4202,4208 ----
\& #if defined the_macro_causing_the_warning
\& #endif
.Ve
! .IP "\fB\-Wendif\-labels\fR" 4
.IX Item "-Wendif-labels"
Warn whenever an \fB#else\fR or an \fB#endif\fR are followed by text.
This usually happens in code of the form
*************** This usually happens in code of the form
*** 4210,4240 ****
\& ...
\& #endif FOO
.Ve
The second and third \f(CW\*(C`FOO\*(C'\fR should be in comments, but often are not
in older programs. This warning is on by default.
! .Ip "\fB\-Werror\fR" 4
.IX Item "-Werror"
Make all warnings into hard errors. Source code which triggers warnings
will be rejected.
! .Ip "\fB\-Wsystem-headers\fR" 4
.IX Item "-Wsystem-headers"
Issue warnings for code in system headers. These are normally unhelpful
in finding bugs in your own code, therefore suppressed. If you are
responsible for the system library, you may want to see them.
! .Ip "\fB\-w\fR" 4
.IX Item "-w"
Suppress all warnings, including those which \s-1GNU\s0 \s-1CPP\s0 issues by default.
! .Ip "\fB\-pedantic\fR" 4
.IX Item "-pedantic"
Issue all the mandatory diagnostics listed in the C standard. Some of
them are left out by default, since they trigger frequently on harmless
code.
! .Ip "\fB\-pedantic-errors\fR" 4
.IX Item "-pedantic-errors"
Issue all the mandatory diagnostics, and make all mandatory diagnostics
into errors. This includes mandatory diagnostics that \s-1GCC\s0 issues
without \fB\-pedantic\fR but treats as warnings.
! .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
--- 4214,4245 ----
\& ...
\& #endif FOO
.Ve
+ .Sp
The second and third \f(CW\*(C`FOO\*(C'\fR should be in comments, but often are not
in older programs. This warning is on by default.
! .IP "\fB\-Werror\fR" 4
.IX Item "-Werror"
Make all warnings into hard errors. Source code which triggers warnings
will be rejected.
! .IP "\fB\-Wsystem\-headers\fR" 4
.IX Item "-Wsystem-headers"
Issue warnings for code in system headers. These are normally unhelpful
in finding bugs in your own code, therefore suppressed. If you are
responsible for the system library, you may want to see them.
! .IP "\fB\-w\fR" 4
.IX Item "-w"
Suppress all warnings, including those which \s-1GNU\s0 \s-1CPP\s0 issues by default.
! .IP "\fB\-pedantic\fR" 4
.IX Item "-pedantic"
Issue all the mandatory diagnostics listed in the C standard. Some of
them are left out by default, since they trigger frequently on harmless
code.
! .IP "\fB\-pedantic\-errors\fR" 4
.IX Item "-pedantic-errors"
Issue all the mandatory diagnostics, and make all mandatory diagnostics
into errors. This includes mandatory diagnostics that \s-1GCC\s0 issues
without \fB\-pedantic\fR but treats as warnings.
! .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
*************** will still be sent to the regular output
*** 4258,4264 ****
.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,
--- 4263,4269 ----
.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,
*************** This implies that the choice of angle br
*** 4268,4274 ****
\&\fB#include\fR directive does not in itself determine whether that
header will appear in \fB\-MM\fR dependency output. This is a
slight change in semantics from \s-1GCC\s0 versions 3.0 and earlier.
! .Ip "\fB\-MF\fR \fIfile\fR" 4
.IX Item "-MF file"
@anchor{\-MF}
When used with \fB\-M\fR or \fB\-MM\fR, specifies a
--- 4273,4279 ----
\&\fB#include\fR directive does not in itself determine whether that
header will appear in \fB\-MM\fR dependency output. This is a
slight change in semantics from \s-1GCC\s0 versions 3.0 and earlier.
! .IP "\fB\-MF\fR \fIfile\fR" 4
.IX Item "-MF file"
@anchor{\-MF}
When used with \fB\-M\fR or \fB\-MM\fR, specifies a
*************** preprocessed output.
*** 4278,4284 ****
.Sp
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"
In conjunction with an option such as \fB\-M\fR requesting
dependency generation, \fB\-MG\fR assumes missing header files are
--- 4283,4289 ----
.Sp
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"
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
*** 4289,4295 ****
this useless.
.Sp
This feature is used in automatic updating of makefiles.
! .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
--- 4294,4300 ----
this useless.
.Sp
This feature is used in automatic updating of makefiles.
! .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
*************** This is typical output:
*** 4301,4310 ****
.Vb 1
\& test.o: test.c test.h
.Ve
.Vb 1
\& test.h:
.Ve
! .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, including any path,
--- 4306,4316 ----
.Vb 1
\& test.o: test.c test.h
.Ve
+ .Sp
.Vb 1
\& test.h:
.Ve
! .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, including any path,
*************** For example, \fB\-MT\ '$(objpfx)foo.o'\f
*** 4320,4326 ****
.Vb 1
\& $(objpfx)foo.o: foo.c
.Ve
! .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
--- 4326,4332 ----
.Vb 1
\& $(objpfx)foo.o: foo.c
.Ve
! .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
*************** Make. \fB\-MQ\ '$(objpfx)foo.o'\fR give
*** 4328,4336 ****
.Vb 1
\& $$(objpfx)foo.o: foo.c
.Ve
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
--- 4334,4343 ----
.Vb 1
\& $$(objpfx)foo.o: foo.c
.Ve
+ .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
*** 4345,4365 ****
.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\-x c\fR" 4
.IX Item "-x c"
.PD 0
! .Ip "\fB\-x c++\fR" 4
.IX Item "-x c++"
! .Ip "\fB\-x objective-c\fR" 4
.IX Item "-x objective-c"
! .Ip "\fB\-x assembler-with-cpp\fR" 4
.IX Item "-x assembler-with-cpp"
.PD
! Specify the source language: C, \*(C+, Objective-C, or assembly. This has
nothing to do with standards conformance or extensions; it merely
selects which base syntax to expect. If you give none of these options,
cpp will deduce the language from the extension of the source file:
--- 4352,4372 ----
.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\-x c\fR" 4
.IX Item "-x c"
.PD 0
! .IP "\fB\-x c++\fR" 4
.IX Item "-x c++"
! .IP "\fB\-x objective-c\fR" 4
.IX Item "-x objective-c"
! .IP "\fB\-x assembler-with-cpp\fR" 4
.IX Item "-x assembler-with-cpp"
.PD
! Specify the source language: C, \*(C+, Objective\-C, or assembly. This has
nothing to do with standards conformance or extensions; it merely
selects which base syntax to expect. If you give none of these options,
cpp will deduce the language from the extension of the source file:
*************** generic mode.
*** 4372,4381 ****
which selected both the language and the standards conformance level.
This option has been removed, because it conflicts with the \fB\-l\fR
option.
! .Ip "\fB\-std=\fR\fIstandard\fR" 4
.IX Item "-std=standard"
.PD 0
! .Ip "\fB\-ansi\fR" 4
.IX Item "-ansi"
.PD
Specify the standard to which the code should conform. Currently \s-1CPP\s0
--- 4379,4388 ----
which selected both the language and the standards conformance level.
This option has been removed, because it conflicts with the \fB\-l\fR
option.
! .IP "\fB\-std=\fR\fIstandard\fR" 4
.IX Item "-std=standard"
.PD 0
! .IP "\fB\-ansi\fR" 4
.IX Item "-ansi"
.PD
Specify the standard to which the code should conform. Currently \s-1CPP\s0
*************** knows about C and \*(C+ standards; other
*** 4384,4468 ****
\&\fIstandard\fR
may be one of:
.RS 4
! .if n .Ip "\f(CW""""iso9899:1990""""\fR" 4
! .el .Ip "\f(CWiso9899:1990\fR" 4
.IX Item "iso9899:1990"
.PD 0
! .if n .Ip "\f(CW""""c89""""\fR" 4
! .el .Ip "\f(CWc89\fR" 4
.IX Item "c89"
.PD
The \s-1ISO\s0 C standard from 1990. \fBc89\fR is the customary shorthand for
this version of the standard.
.Sp
The \fB\-ansi\fR option is equivalent to \fB\-std=c89\fR.
! .if n .Ip "\f(CW""""iso9899:199409""""\fR" 4
! .el .Ip "\f(CWiso9899:199409\fR" 4
.IX Item "iso9899:199409"
The 1990 C standard, as amended in 1994.
! .if n .Ip "\f(CW""""iso9899:1999""""\fR" 4
! .el .Ip "\f(CWiso9899:1999\fR" 4
.IX Item "iso9899:1999"
.PD 0
! .if n .Ip "\f(CW""""c99""""\fR" 4
! .el .Ip "\f(CWc99\fR" 4
.IX Item "c99"
! .if n .Ip "\f(CW""""iso9899:199x""""\fR" 4
! .el .Ip "\f(CWiso9899:199x\fR" 4
.IX Item "iso9899:199x"
! .if n .Ip "\f(CW""""c9x""""\fR" 4
! .el .Ip "\f(CWc9x\fR" 4
.IX Item "c9x"
.PD
The revised \s-1ISO\s0 C standard, published in December 1999. Before
publication, this was known as C9X.
! .if n .Ip "\f(CW""""gnu89""""\fR" 4
! .el .Ip "\f(CWgnu89\fR" 4
.IX Item "gnu89"
The 1990 C standard plus \s-1GNU\s0 extensions. This is the default.
! .if n .Ip "\f(CW""""gnu99""""\fR" 4
! .el .Ip "\f(CWgnu99\fR" 4
.IX Item "gnu99"
.PD 0
! .if n .Ip "\f(CW""""gnu9x""""\fR" 4
! .el .Ip "\f(CWgnu9x\fR" 4
.IX Item "gnu9x"
.PD
The 1999 C standard plus \s-1GNU\s0 extensions.
! .if n .Ip "\f(CW""""c++98""""\fR" 4
! .el .Ip "\f(CWc++98\fR" 4
.IX Item "c++98"
The 1998 \s-1ISO\s0 \*(C+ standard plus amendments.
! .if n .Ip "\f(CW""""gnu++98""""\fR" 4
! .el .Ip "\f(CWgnu++98\fR" 4
.IX Item "gnu++98"
The same as \fB\-std=c++98\fR plus \s-1GNU\s0 extensions. This is the
default for \*(C+ code.
.RE
.RS 4
.RE
! .Ip "\fB\-I-\fR" 4
.IX Item "-I-"
Split the include path. 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.
! .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\-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\-include\fR \fIfile\fR" 4
.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
--- 4391,4475 ----
\&\fIstandard\fR
may be one of:
.RS 4
! .ie n .IP """iso9899:1990""" 4
! .el .IP "\f(CWiso9899:1990\fR" 4
.IX Item "iso9899:1990"
.PD 0
! .ie n .IP """c89""" 4
! .el .IP "\f(CWc89\fR" 4
.IX Item "c89"
.PD
The \s-1ISO\s0 C standard from 1990. \fBc89\fR is the customary shorthand for
this version of the standard.
.Sp
The \fB\-ansi\fR option is equivalent to \fB\-std=c89\fR.
! .ie n .IP """iso9899:199409""" 4
! .el .IP "\f(CWiso9899:199409\fR" 4
.IX Item "iso9899:199409"
The 1990 C standard, as amended in 1994.
! .ie n .IP """iso9899:1999""" 4
! .el .IP "\f(CWiso9899:1999\fR" 4
.IX Item "iso9899:1999"
.PD 0
! .ie n .IP """c99""" 4
! .el .IP "\f(CWc99\fR" 4
.IX Item "c99"
! .ie n .IP """iso9899:199x""" 4
! .el .IP "\f(CWiso9899:199x\fR" 4
.IX Item "iso9899:199x"
! .ie n .IP """c9x""" 4
! .el .IP "\f(CWc9x\fR" 4
.IX Item "c9x"
.PD
The revised \s-1ISO\s0 C standard, published in December 1999. Before
publication, this was known as C9X.
! .ie n .IP """gnu89""" 4
! .el .IP "\f(CWgnu89\fR" 4
.IX Item "gnu89"
The 1990 C standard plus \s-1GNU\s0 extensions. This is the default.
! .ie n .IP """gnu99""" 4
! .el .IP "\f(CWgnu99\fR" 4
.IX Item "gnu99"
.PD 0
! .ie n .IP """gnu9x""" 4
! .el .IP "\f(CWgnu9x\fR" 4
.IX Item "gnu9x"
.PD
The 1999 C standard plus \s-1GNU\s0 extensions.
! .ie n .IP """c++98""" 4
! .el .IP "\f(CWc++98\fR" 4
.IX Item "c++98"
The 1998 \s-1ISO\s0 \*(C+ standard plus amendments.
! .ie n .IP """gnu++98""" 4
! .el .IP "\f(CWgnu++98\fR" 4
.IX Item "gnu++98"
The same as \fB\-std=c++98\fR plus \s-1GNU\s0 extensions. This is the
default for \*(C+ code.
.RE
.RS 4
.RE
! .IP "\fB\-I\-\fR" 4
.IX Item "-I-"
Split the include path. 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.
! .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\-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\-include\fR \fIfile\fR" 4
.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
*************** chain as normal.
*** 4473,4479 ****
.Sp
If multiple \fB\-include\fR options are given, the files are included
in the order they appear on the command line.
! .Ip "\fB\-imacros\fR \fIfile\fR" 4
.IX Item "-imacros file"
Exactly like \fB\-include\fR, except that any output produced by
scanning \fIfile\fR is thrown away. Macros it defines remain defined.
--- 4480,4486 ----
.Sp
If multiple \fB\-include\fR options are given, the files are included
in the order they appear on the command line.
! .IP "\fB\-imacros\fR \fIfile\fR" 4
.IX Item "-imacros file"
Exactly like \fB\-include\fR, except that any output produced by
scanning \fIfile\fR is thrown away. Macros it defines remain defined.
*************** processing its declarations.
*** 4482,4501 ****
.Sp
All files specified by \fB\-imacros\fR are processed before all files
specified by \fB\-include\fR.
! .Ip "\fB\-idirafter\fR \fIdir\fR" 4
.IX Item "-idirafter dir"
Search \fIdir\fR for header files, but do it \fIafter\fR all
directories specified with \fB\-I\fR and the standard system directories
have been exhausted. \fIdir\fR is treated as a system include directory.
! .Ip "\fB\-iprefix\fR \fIprefix\fR" 4
.IX Item "-iprefix prefix"
Specify \fIprefix\fR as the prefix for subsequent \fB\-iwithprefix\fR
options. If the prefix represents a directory, you should include the
final \fB/\fR.
! .Ip "\fB\-iwithprefix\fR \fIdir\fR" 4
.IX Item "-iwithprefix dir"
.PD 0
! .Ip "\fB\-iwithprefixbefore\fR \fIdir\fR" 4
.IX Item "-iwithprefixbefore dir"
.PD
Append \fIdir\fR to the prefix specified previously with
--- 4489,4508 ----
.Sp
All files specified by \fB\-imacros\fR are processed before all files
specified by \fB\-include\fR.
! .IP "\fB\-idirafter\fR \fIdir\fR" 4
.IX Item "-idirafter dir"
Search \fIdir\fR for header files, but do it \fIafter\fR all
directories specified with \fB\-I\fR and the standard system directories
have been exhausted. \fIdir\fR is treated as a system include directory.
! .IP "\fB\-iprefix\fR \fIprefix\fR" 4
.IX Item "-iprefix prefix"
Specify \fIprefix\fR as the prefix for subsequent \fB\-iwithprefix\fR
options. If the prefix represents a directory, you should include the
final \fB/\fR.
! .IP "\fB\-iwithprefix\fR \fIdir\fR" 4
.IX Item "-iwithprefix dir"
.PD 0
! .IP "\fB\-iwithprefixbefore\fR \fIdir\fR" 4
.IX Item "-iwithprefixbefore dir"
.PD
Append \fIdir\fR to the prefix specified previously with
*************** path. \fB\-iwithprefixbefore\fR puts it
*** 4504,4516 ****
would; \fB\-iwithprefix\fR puts it where \fB\-idirafter\fR would.
.Sp
Use of these options is discouraged.
! .Ip "\fB\-isystem\fR \fIdir\fR" 4
.IX Item "-isystem dir"
Search \fIdir\fR for header files, after all directories specified by
\&\fB\-I\fR 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.
! .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
--- 4511,4523 ----
would; \fB\-iwithprefix\fR puts it where \fB\-idirafter\fR would.
.Sp
Use of these options is discouraged.
! .IP "\fB\-isystem\fR \fIdir\fR" 4
.IX Item "-isystem dir"
Search \fIdir\fR for header files, after all directories specified by
\&\fB\-I\fR 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.
! .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.
*** 4523,4551 ****
\&\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\-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\-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\-A\fR \fIpredicate\fR\fB=\fR\fIanswer\fR" 4
.IX Item "-A predicate=answer"
Make an assertion with the predicate \fIpredicate\fR and answer
\&\fIanswer\fR. This form is preferred to the older form \fB\-A\fR
\&\fIpredicate\fR\fB(\fR\fIanswer\fR\fB)\fR, 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\-dCHARS\fR" 4
.IX Item "-dCHARS"
\&\fI\s-1CHARS\s0\fR is a sequence of one or more of the following characters,
and must not be preceded by a space. Other characters are interpreted
--- 4530,4558 ----
\&\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\-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\-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\-A\fR \fIpredicate\fR\fB=\fR\fIanswer\fR" 4
.IX Item "-A predicate=answer"
Make an assertion with the predicate \fIpredicate\fR and answer
\&\fIanswer\fR. This form is preferred to the older form \fB\-A\fR
\&\fIpredicate\fR\fB(\fR\fIanswer\fR\fB)\fR, 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\-dCHARS\fR" 4
.IX Item "-dCHARS"
\&\fI\s-1CHARS\s0\fR is a sequence of one or more of the following characters,
and must not be preceded by a space. Other characters are interpreted
*************** by the compiler proper, or reserved for
*** 4553,4559 ****
are silently ignored. If you specify characters whose behavior
conflicts, the result is undefined.
.RS 4
! .Ip "\fBM\fR" 4
.IX Item "M"
Instead of the normal output, generate a list of \fB#define\fR
directives for all the macros defined during the execution of the
--- 4560,4566 ----
are silently ignored. If you specify characters whose behavior
conflicts, the result is undefined.
.RS 4
! .IP "\fBM\fR" 4
.IX Item "M"
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
*** 4564,4593 ****
.Vb 1
\& touch foo.h; cpp -dM foo.h
.Ve
will show all the predefined macros.
! .Ip "\fBD\fR" 4
.IX Item "D"
Like \fBM\fR except in two respects: it does \fInot\fR include the
predefined macros, and 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 "\fBN\fR" 4
.IX Item "N"
Like \fBD\fR, but emit only the macro names, not their expansions.
! .Ip "\fBI\fR" 4
.IX Item "I"
Output \fB#include\fR directives in addition to the result of
preprocessing.
.RE
.RS 4
.RE
! .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\-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
--- 4571,4601 ----
.Vb 1
\& touch foo.h; cpp -dM foo.h
.Ve
+ .Sp
will show all the predefined macros.
! .IP "\fBD\fR" 4
.IX Item "D"
Like \fBM\fR except in two respects: it does \fInot\fR include the
predefined macros, and 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 "\fBN\fR" 4
.IX Item "N"
Like \fBD\fR, but emit only the macro names, not their expansions.
! .IP "\fBI\fR" 4
.IX Item "I"
Output \fB#include\fR directives in addition to the result of
preprocessing.
.RE
.RS 4
.RE
! .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\-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
*** 4598,4604 ****
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
--- 4606,4612 ----
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 w
*** 4606,4621 ****
.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\-traditional-cpp\fR" 4
.IX Item "-traditional-cpp"
Try to imitate the behavior of old-fashioned C preprocessors, as
opposed to \s-1ISO\s0 C preprocessors.
! .Ip "\fB\-trigraphs\fR" 4
.IX Item "-trigraphs"
Process trigraph sequences.
These are three-character sequences, all starting with \fB??\fR, that
--- 4614,4629 ----
.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\-traditional\-cpp\fR" 4
.IX Item "-traditional-cpp"
Try to imitate the behavior of old-fashioned C preprocessors, as
opposed to \s-1ISO\s0 C preprocessors.
! .IP "\fB\-trigraphs\fR" 4
.IX Item "-trigraphs"
Process trigraph sequences.
These are three-character sequences, all starting with \fB??\fR, that
*************** The nine trigraphs and their replacement
*** 4631,4669 ****
\& Trigraph: ??( ??) ??< ??> ??= ??/ ??' ??! ??-
\& Replacement: [ ] { } # \e ^ | ~
.Ve
! .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 \s-1MS-DOS\s0.
! .Ip "\fB\*(--help\fR" 4
! .IX Item "help"
.PD 0
! .Ip "\fB\*(--target-help\fR" 4
! .IX Item "target-help"
.PD
Print text describing all the command line options instead of
preprocessing anything.
! .Ip "\fB\-v\fR" 4
.IX Item "-v"
Verbose mode. Print out \s-1GNU\s0 \s-1CPP\s0's version number at the beginning of
execution, and report the final form of the include path.
! .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.
! .Ip "\fB\-version\fR" 4
.IX Item "-version"
.PD 0
! .Ip "\fB\*(--version\fR" 4
! .IX Item "version"
.PD
Print out \s-1GNU\s0 \s-1CPP\s0's version number. With one dash, proceed to
preprocess as normal. With two dashes, exit immediately.
.Sh "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.
--- 4639,4677 ----
\& Trigraph: ??( ??) ??< ??> ??= ??/ ??' ??! ??-
\& Replacement: [ ] { } # \e ^ | ~
.Ve
! .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 \s-1MS\-DOS\s0.
! .IP "\fB\-\-help\fR" 4
! .IX Item "--help"
.PD 0
! .IP "\fB\-\-target\-help\fR" 4
! .IX Item "--target-help"
.PD
Print text describing all the command line options instead of
preprocessing anything.
! .IP "\fB\-v\fR" 4
.IX Item "-v"
Verbose mode. Print out \s-1GNU\s0 \s-1CPP\s0's version number at the beginning of
execution, and report the final form of the include path.
! .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.
! .IP "\fB\-version\fR" 4
.IX Item "-version"
.PD 0
! .IP "\fB\-\-version\fR" 4
! .IX Item "--version"
.PD
Print out \s-1GNU\s0 \s-1CPP\s0's version number. With one dash, proceed to
preprocess as normal. With two dashes, exit immediately.
.Sh "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.
*************** contains commas, it is split into multip
*** 4672,4698 ****
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\-l\fR\fIlibrary\fR" 4
.IX Item "-llibrary"
.PD 0
! .Ip "\fB\-l\fR \fIlibrary\fR" 4
.IX Item "-l library"
.PD
Search the library named \fIlibrary\fR when linking. (The second
--- 4680,4706 ----
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\-l\fR\fIlibrary\fR" 4
.IX Item "-llibrary"
.PD 0
! .IP "\fB\-l\fR \fIlibrary\fR" 4
.IX Item "-l library"
.PD
Search the library named \fIlibrary\fR when linking. (The second
*************** ordinary object file, it is linked in th
*** 4720,4735 ****
difference between using an \fB\-l\fR option and specifying a file name
is that \fB\-l\fR surrounds \fIlibrary\fR with \fBlib\fR and \fB.a\fR
and searches several directories.
! .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 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
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 will be passed to the linker.
--- 4728,4743 ----
difference between using an \fB\-l\fR option and specifying a file name
is that \fB\-l\fR surrounds \fIlibrary\fR with \fBlib\fR and \fB.a\fR
and searches several directories.
! .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 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
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 will be passed to the linker.
*************** for System V (and \s-1ISO\s0 C) environm
*** 4739,4745 ****
\&\s-1BSD\s0 environments. 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\-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 will be passed to
--- 4747,4753 ----
\&\s-1BSD\s0 environments. 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\-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 will be passed to
*************** or \fB\-nodefaultlibs\fR you should usua
*** 4760,4783 ****
This ensures that you have no unresolved references to internal \s-1GCC\s0
library subroutines. (For example, \fB_\|_main\fR, used to ensure \*(C+
constructors will be called.)
! .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 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 that were used to
generate code (\fB\-fpic\fR, \fB\-fPIC\fR, or model suboptions)
when you specify this 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
--- 4768,4791 ----
This ensures that you have no unresolved references to internal \s-1GCC\s0
library subroutines. (For example, \fB_\|_main\fR, used to ensure \*(C+
constructors will be called.)
! .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 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 that were used to
generate code (\fB\-fpic\fR, \fB\-fPIC\fR, or model suboptions)
when you specify this 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
*** 4792,4805 ****
as well as the application itself should use the shared \fIlibgcc\fR.
.Sp
Therefore, the G++ and \s-1GCJ\s0 drivers automatically add
! \&\fB\-shared-libgcc\fR whenever you build a shared library or a main
executable, because \*(C+ and Java 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 will not always be linked with the shared \fIlibgcc\fR.
If \s-1GCC\s0 finds, at its configuration time, that you have a \s-1GNU\s0 linker that
! does not support option \fB\*(--eh-frame-hdr\fR, it will link the shared
version of \fIlibgcc\fR into shared libraries by default. Otherwise,
it will take advantage of the linker and optimize away the linking with
the shared version of \fIlibgcc\fR, linking with the static version of
--- 4800,4813 ----
as well as the application itself should use the shared \fIlibgcc\fR.
.Sp
Therefore, the G++ and \s-1GCJ\s0 drivers automatically add
! \&\fB\-shared\-libgcc\fR whenever you build a shared library or a main
executable, because \*(C+ and Java 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 will not always be linked with the shared \fIlibgcc\fR.
If \s-1GCC\s0 finds, at its configuration time, that you have a \s-1GNU\s0 linker that
! does not support option \fB\-\-eh\-frame\-hdr\fR, it will link the shared
version of \fIlibgcc\fR into shared libraries by default. Otherwise,
it will take advantage of the linker and optimize away the linking with
the shared version of \fIlibgcc\fR, linking with the static version of
*************** time.
*** 4810,4824 ****
However, if a library or main executable is supposed to throw or catch
exceptions, you must link it using the G++ or \s-1GCJ\s0 driver, as appropriate
for the languages used in the program, or using the option
! \&\fB\-shared-libgcc\fR, such that it is linked with the shared
\&\fIlibgcc\fR.
! .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
option \fB\-Xlinker \-z \-Xlinker defs\fR). Only a few systems support
this option.
! .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 which \s-1GCC\s0 does not know how to
--- 4818,4832 ----
However, if a library or main executable is supposed to throw or catch
exceptions, you must link it using the G++ or \s-1GCJ\s0 driver, as appropriate
for the languages used in the program, or using the option
! \&\fB\-shared\-libgcc\fR, such that it is linked with the shared
\&\fIlibgcc\fR.
! .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
option \fB\-Xlinker \-z \-Xlinker defs\fR). Only a few systems support
this option.
! .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 which \s-1GCC\s0 does not know how to
*************** For example, to pass \fB\-assert definit
*** 4830,4840 ****
\&\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.
! .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.
! .Ip "\fB\-u\fR \fIsymbol\fR" 4
.IX Item "-u symbol"
Pretend the symbol \fIsymbol\fR is undefined, to force linking of
library modules to define it. You can use \fB\-u\fR multiple times with
--- 4838,4848 ----
\&\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.
! .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.
! .IP "\fB\-u\fR \fIsymbol\fR" 4
.IX Item "-u symbol"
Pretend the symbol \fIsymbol\fR is undefined, to force linking of
library modules to define it. You can use \fB\-u\fR multiple times with
*************** different symbols to force loading of ad
*** 4843,4849 ****
.IX Subsection "Options for Directory Search"
These options specify directories to search for header files, for
libraries and for parts of the compiler:
! .Ip "\fB\-I\fR\fIdir\fR" 4
.IX Item "-Idir"
Add the directory \fIdir\fR to the head of the list of directories to be
searched for header files. This can be used to override a system header
--- 4851,4857 ----
.IX Subsection "Options for Directory Search"
These options specify directories to search for header files, for
libraries and for parts of the compiler:
! .IP "\fB\-I\fR\fIdir\fR" 4
.IX Item "-Idir"
Add the directory \fIdir\fR to the head of the list of directories to be
searched for header files. This can be used to override a system header
*************** This is to ensure that \s-1GCC\s0's proc
*** 4862,4894 ****
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 \fB\-nostdinc\fR and/or \fB\-isystem\fR options.
! .Ip "\fB\-I-\fR" 4
.IX Item "-I-"
! Any directories you specify with \fB\-I\fR options before the \fB\-I-\fR
option are searched only for the case of \fB#include "\fR\fIfile\fR\fB"\fR;
they are not searched for \fB#include <\fR\fIfile\fR\fB>\fR.
.Sp
If additional directories are specified with \fB\-I\fR options after
! the \fB\-I-\fR, these directories are searched for all \fB#include\fR
directives. (Ordinarily \fIall\fR \fB\-I\fR directories are used
this way.)
.Sp
! In addition, the \fB\-I-\fR option inhibits the use of the current
directory (where the current input file came from) as the first search
directory for \fB#include "\fR\fIfile\fR\fB"\fR. There is no way to
! override this effect of \fB\-I-\fR. With \fB\-I.\fR you can specify
searching the directory which was current when the compiler was
invoked. That is not exactly the same as what the preprocessor does
by default, but it is often satisfactory.
.Sp
! \&\fB\-I-\fR does not inhibit the use of the standard system directories
! for header files. Thus, \fB\-I-\fR and \fB\-nostdinc\fR are
independent.
! .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.
--- 4870,4902 ----
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 \fB\-nostdinc\fR and/or \fB\-isystem\fR options.
! .IP "\fB\-I\-\fR" 4
.IX Item "-I-"
! Any directories you specify with \fB\-I\fR options before the \fB\-I\-\fR
option are searched only for the case of \fB#include "\fR\fIfile\fR\fB"\fR;
they are not searched for \fB#include <\fR\fIfile\fR\fB>\fR.
.Sp
If additional directories are specified with \fB\-I\fR options after
! the \fB\-I\-\fR, these directories are searched for all \fB#include\fR
directives. (Ordinarily \fIall\fR \fB\-I\fR directories are used
this way.)
.Sp
! In addition, the \fB\-I\-\fR option inhibits the use of the current
directory (where the current input file came from) as the first search
directory for \fB#include "\fR\fIfile\fR\fB"\fR. There is no way to
! override this effect of \fB\-I\-\fR. With \fB\-I.\fR you can specify
searching the directory which was current when the compiler was
invoked. That is not exactly the same as what the preprocessor does
by default, but it is often satisfactory.
.Sp
! \&\fB\-I\-\fR does not inhibit the use of the standard system directories
! for header files. Thus, \fB\-I\-\fR and \fB\-nostdinc\fR are
independent.
! .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.
*************** without \fImachine\fR\fB/\fR\fIversion\f
*** 4901,4907 ****
For each subprogram to be run, the compiler driver first tries the
\&\fB\-B\fR prefix, if any. If that name is not found, or if \fB\-B\fR
was not specified, the driver tries two standard prefixes, which are
! \&\fI/usr/lib/gcc/\fR and \fI/usr/local/lib/gcc-lib/\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.
--- 4909,4915 ----
For each subprogram to be run, the compiler driver first tries the
\&\fB\-B\fR prefix, if any. If that name is not found, or if \fB\-B\fR
was not specified, the driver tries two standard prefixes, which are
! \&\fI/usr/lib/gcc/\fR and \fI/usr/local/lib/gcc\-lib/\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.
*************** As a special kludge, if the path provide
*** 4929,4935 ****
\&\fI[dir/]stage\fIN\fI/\fR, where \fIN\fR is a number in the range 0 to
9, then it will be replaced by \fI[dir/]include\fR. This is to help
with boot-strapping the compiler.
! .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 that the \fIgcc\fR driver
--- 4937,4943 ----
\&\fI[dir/]stage\fIN\fI/\fR, where \fIN\fR is a number in the range 0 to
9, then it will be replaced by \fI[dir/]include\fR. This is to help
with boot-strapping the compiler.
! .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 that the \fIgcc\fR driver
*************** are processed in order, from left to rig
*** 4940,4966 ****
.Sh "Specifying Target Machine and Compiler Version"
.IX Subsection "Specifying Target Machine and Compiler Version"
The usual way to run \s-1GCC\s0 is to run the executable called \fIgcc\fR, or
! \&\fI\-gcc\fR when cross-compiling, or
! \&\fI\-gcc-\fR to run a version other than the one that
was installed last. Sometimes this is inconvenient, so \s-1GCC\s0 provides
options that will switch to another cross-compiler or version.
! .Ip "\fB\-b\fR \fImachine\fR" 4
.IX Item "-b machine"
The argument \fImachine\fR specifies the target machine for compilation.
.Sp
The value to use for \fImachine\fR is the same as was specified as the
! machine type when configuring \s-1GCC\s0 as a cross-compiler. For
example, if a cross-compiler was configured with \fBconfigure
i386v\fR, meaning to compile for an 80386 running System V, then you
would specify \fB\-b i386v\fR to run that cross compiler.
! .Ip "\fB\-V\fR \fIversion\fR" 4
.IX Item "-V version"
The argument \fIversion\fR specifies which version of \s-1GCC\s0 to run.
This is useful when multiple versions are installed. For example,
\&\fIversion\fR might be \fB2.0\fR, meaning to run \s-1GCC\s0 version 2.0.
.PP
The \fB\-V\fR and \fB\-b\fR options work by running the
! \&\fI\-gcc-\fR executable, so there's no real reason to
use them if you can just run that directly.
.Sh "Hardware Models and Configurations"
.IX Subsection "Hardware Models and Configurations"
--- 4948,4974 ----
.Sh "Specifying Target Machine and Compiler Version"
.IX Subsection "Specifying Target Machine and Compiler Version"
The usual way to run \s-1GCC\s0 is to run the executable called \fIgcc\fR, or
! \&\fI\-gcc\fR when cross\-compiling, or
! \&\fI\-gcc\-\fR to run a version other than the one that
was installed last. Sometimes this is inconvenient, so \s-1GCC\s0 provides
options that will switch to another cross-compiler or version.
! .IP "\fB\-b\fR \fImachine\fR" 4
.IX Item "-b machine"
The argument \fImachine\fR specifies the target machine for compilation.
.Sp
The value to use for \fImachine\fR is the same as was specified as the
! machine type when configuring \s-1GCC\s0 as a cross\-compiler. For
example, if a cross-compiler was configured with \fBconfigure
i386v\fR, meaning to compile for an 80386 running System V, then you
would specify \fB\-b i386v\fR to run that cross compiler.
! .IP "\fB\-V\fR \fIversion\fR" 4
.IX Item "-V version"
The argument \fIversion\fR specifies which version of \s-1GCC\s0 to run.
This is useful when multiple versions are installed. For example,
\&\fIversion\fR might be \fB2.0\fR, meaning to run \s-1GCC\s0 version 2.0.
.PP
The \fB\-V\fR and \fB\-b\fR options work by running the
! \&\fI\-gcc\-\fR executable, so there's no real reason to
use them if you can just run that directly.
.Sh "Hardware Models and Configurations"
.IX Subsection "Hardware Models and Configurations"
*************** These options are defined by the macro \
*** 4983,4999 ****
machine description. The default for the options is also defined by
that macro, which enables you to change the defaults.
.PP
! .I "M680x0 Options"
.IX Subsection "M680x0 Options"
.PP
These are the \fB\-m\fR options defined for the 68000 series. The default
values for these options depends on which style of 68000 was selected when
the compiler was configured; the defaults for the most common choices are
given below.
! .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
--- 4991,5007 ----
machine description. The default for the options is also defined by
that macro, which enables you to change the defaults.
.PP
! \fIM680x0 Options\fR
.IX Subsection "M680x0 Options"
.PP
These are the \fB\-m\fR options defined for the 68000 series. The default
values for these options depends on which style of 68000 was selected when
the compiler was configured; the defaults for the most common choices are
given below.
! .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 6800
*** 5001,5024 ****
.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\-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.
! .Ip "\fB\-m68881\fR" 4
.IX Item "-m68881"
Generate output containing 68881 instructions for floating point.
! This is the default for most 68020 systems unless \fB\*(--nfp\fR was
specified when the compiler was configured.
! .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.
! .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.
--- 5009,5032 ----
.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\-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.
! .IP "\fB\-m68881\fR" 4
.IX Item "-m68881"
Generate output containing 68881 instructions for floating point.
! This is the default for most 68020 systems unless \fB\-\-nfp\fR was
specified when the compiler was configured.
! .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.
! .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.
*************** configured for 68040\-based systems.
*** 5026,5032 ****
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.
--- 5034,5040 ----
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.
*************** configured for 68060\-based systems.
*** 5034,5040 ****
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.
--- 5042,5048 ----
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.
*************** when the compiler is configured for CPU3
*** 5042,5091 ****
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'' family cpu. This is the default
! when the compiler is configured for 520X-based systems.
.Sp
Use this option for microcontroller with a 5200 core, including
the \s-1MCF5202\s0, \s-1MCF5203\s0, \s-1MCF5204\s0 and \s-1MCF5202\s0.
! .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 which 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.
! .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 which 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.
! .Ip "\fB\-mfpa\fR" 4
.IX Item "-mfpa"
Generate output containing Sun \s-1FPA\s0 instructions for floating point.
! .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 m68k
targets. Normally the facilities of the machine's usual C compiler are
! used, but this can't be done directly in cross-compilation. You must
make your own arrangements to provide suitable library functions for
! cross-compilation. The embedded targets \fBm68k-*\-aout\fR and
! \&\fBm68k-*\-coff\fR do provide software floating point support.
! .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.
! .Ip "\fB\-mnobitfield\fR" 4
.IX Item "-mnobitfield"
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
--- 5050,5099 ----
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'' family cpu. This is the default
! when the compiler is configured for 520X\-based systems.
.Sp
Use this option for microcontroller with a 5200 core, including
the \s-1MCF5202\s0, \s-1MCF5203\s0, \s-1MCF5204\s0 and \s-1MCF5202\s0.
! .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 which 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.
! .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 which 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.
! .IP "\fB\-mfpa\fR" 4
.IX Item "-mfpa"
Generate output containing Sun \s-1FPA\s0 instructions for floating point.
! .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 m68k
targets. Normally the facilities of the machine's usual C compiler are
! used, but this can't be done directly in cross\-compilation. You must
make your own arrangements to provide suitable library functions for
! cross\-compilation. The embedded targets \fBm68k\-*\-aout\fR and
! \&\fBm68k\-*\-coff\fR do provide software floating point support.
! .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.
! .IP "\fB\-mnobitfield\fR" 4
.IX Item "-mnobitfield"
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
*************** harmlessly ignored.)
*** 5108,5270 ****
.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.
! .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 will
align structures containing the above types differently than
most published application binary interface specifications for the m68k.
! .Ip "\fB\-mpcrel\fR" 4
.IX Item "-mpcrel"
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 will be handled by
the system.
.PP
! .I "M68hc1x Options"
.IX Subsection "M68hc1x Options"
.PP
These are the \fB\-m\fR options defined for the 68hc11 and 68hc12
microcontrollers. The default values for these options depends on
which style of microcontroller was selected when the compiler was configured;
the defaults for the most common choices are given below.
! .Ip "\fB\-m6811\fR" 4
.IX Item "-m6811"
.PD 0
! .Ip "\fB\-m68hc11\fR" 4
.IX Item "-m68hc11"
.PD
Generate output for a 68HC11. This is the default
when the compiler is configured for 68HC11\-based systems.
! .Ip "\fB\-m6812\fR" 4
.IX Item "-m6812"
.PD 0
! .Ip "\fB\-m68hc12\fR" 4
.IX Item "-m68hc12"
.PD
Generate output for a 68HC12. This is the default
when the compiler is configured for 68HC12\-based systems.
! .Ip "\fB\-m68S12\fR" 4
.IX Item "-m68S12"
.PD 0
! .Ip "\fB\-m68hcs12\fR" 4
.IX Item "-m68hcs12"
.PD
Generate output for a 68HCS12.
! .Ip "\fB\-mauto-incdec\fR" 4
.IX Item "-mauto-incdec"
Enable the use of 68HC12 pre and post auto-increment and auto-decrement
addressing modes.
! .Ip "\fB\-minmax\fR" 4
.IX Item "-minmax"
.PD 0
! .Ip "\fB\-nominmax\fR" 4
.IX Item "-nominmax"
.PD
Enable the use of 68HC12 min and max instructions.
! .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 will use the \f(CW\*(C`call\*(C'\fR instruction to
call a function and the \f(CW\*(C`rtc\*(C'\fR instruction for returning.
! .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.
! .Ip "\fB\-msoft-reg-count=\fR\fIcount\fR" 4
.IX Item "-msoft-reg-count=count"
Specify the number of pseudo-soft registers which are used for the
code generation. The maximum number is 32. Using more pseudo-soft
register may or may not result in better code depending on the program.
The default is 4 for 68HC11 and 2 for 68HC12.
.PP
! .I "\s-1VAX\s0 Options"
.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 you
will assemble with the \s-1GNU\s0 assembler.
! .Ip "\fB\-mg\fR" 4
.IX Item "-mg"
! Output code for g-format floating point numbers instead of d-format.
.PP
! .I "\s-1SPARC\s0 Options"
.IX Subsection "SPARC Options"
.PP
These \fB\-m\fR switches 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\s0 \s-1SVR4\s0 \s-1ABI\s0 reserves for applications. This
is the default.
.Sp
To be fully \s-1SVR4\s0 \s-1ABI\s0 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\-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
--- 5116,5278 ----
.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.
! .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 will
align structures containing the above types differently than
most published application binary interface specifications for the m68k.
! .IP "\fB\-mpcrel\fR" 4
.IX Item "-mpcrel"
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 will be handled by
the system.
.PP
! \fIM68hc1x Options\fR
.IX Subsection "M68hc1x Options"
.PP
These are the \fB\-m\fR options defined for the 68hc11 and 68hc12
microcontrollers. The default values for these options depends on
which style of microcontroller was selected when the compiler was configured;
the defaults for the most common choices are given below.
! .IP "\fB\-m6811\fR" 4
.IX Item "-m6811"
.PD 0
! .IP "\fB\-m68hc11\fR" 4
.IX Item "-m68hc11"
.PD
Generate output for a 68HC11. This is the default
when the compiler is configured for 68HC11\-based systems.
! .IP "\fB\-m6812\fR" 4
.IX Item "-m6812"
.PD 0
! .IP "\fB\-m68hc12\fR" 4
.IX Item "-m68hc12"
.PD
Generate output for a 68HC12. This is the default
when the compiler is configured for 68HC12\-based systems.
! .IP "\fB\-m68S12\fR" 4
.IX Item "-m68S12"
.PD 0
! .IP "\fB\-m68hcs12\fR" 4
.IX Item "-m68hcs12"
.PD
Generate output for a 68HCS12.
! .IP "\fB\-mauto\-incdec\fR" 4
.IX Item "-mauto-incdec"
Enable the use of 68HC12 pre and post auto-increment and auto-decrement
addressing modes.
! .IP "\fB\-minmax\fR" 4
.IX Item "-minmax"
.PD 0
! .IP "\fB\-nominmax\fR" 4
.IX Item "-nominmax"
.PD
Enable the use of 68HC12 min and max instructions.
! .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 will use the \f(CW\*(C`call\*(C'\fR instruction to
call a function and the \f(CW\*(C`rtc\*(C'\fR instruction for returning.
! .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.
! .IP "\fB\-msoft\-reg\-count=\fR\fIcount\fR" 4
.IX Item "-msoft-reg-count=count"
Specify the number of pseudo-soft registers which are used for the
code generation. The maximum number is 32. Using more pseudo-soft
register may or may not result in better code depending on the program.
The default is 4 for 68HC11 and 2 for 68HC12.
.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 you
will assemble with the \s-1GNU\s0 assembler.
! .IP "\fB\-mg\fR" 4
.IX Item "-mg"
! Output code for g\-format floating point numbers instead of d\-format.
.PP
! \fI\s-1SPARC\s0 Options\fR
.IX Subsection "SPARC Options"
.PP
These \fB\-m\fR switches 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\s0 \s-1SVR4\s0 \s-1ABI\s0 reserves for applications. This
is the default.
.Sp
To be fully \s-1SVR4\s0 \s-1ABI\s0 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\-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
*************** support for the quad-word floating point
*** 5275,5317 ****
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-flat\fR" 4
.IX Item "-mno-flat"
.PD 0
! .Ip "\fB\-mflat\fR" 4
.IX Item "-mflat"
.PD
With \fB\-mflat\fR, the compiler does not generate save/restore instructions
and will use a ``flat'' or single register window calling convention.
This model uses \f(CW%i7\fR as the frame pointer and is compatible with the normal
register window model. Code from either may be intermixed.
! The local registers and the input registers (0\*(--5) are still treated as
``call saved'' registers and will be saved on the stack as necessary.
.Sp
! With \fB\-mno-flat\fR (the default), the compiler emits save/restore
instructions (except for leaf functions) and is the normal mode of operation.
! .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\-mno-faster-structs\fR" 4
.IX Item "-mno-faster-structs"
.PD 0
! .Ip "\fB\-mfaster-structs\fR" 4
.IX Item "-mfaster-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.
--- 5283,5325 ----
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\-flat\fR" 4
.IX Item "-mno-flat"
.PD 0
! .IP "\fB\-mflat\fR" 4
.IX Item "-mflat"
.PD
With \fB\-mflat\fR, the compiler does not generate save/restore instructions
and will use a ``flat'' or single register window calling convention.
This model uses \f(CW%i7\fR as the frame pointer and is compatible with the normal
register window model. Code from either may be intermixed.
! The local registers and the input registers (0\-\-5) are still treated as
``call saved'' registers and will be saved on the stack as necessary.
.Sp
! With \fB\-mno\-flat\fR (the default), the compiler emits save/restore
instructions (except for leaf functions) and is the normal mode of operation.
! .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\-mno\-faster\-structs\fR" 4
.IX Item "-mno-faster-structs"
.PD 0
! .IP "\fB\-mfaster\-structs\fR" 4
.IX Item "-mfaster-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 alignme
*** 5319,5343 ****
\&\s-1ABI\s0. Thus, it's intended only for use on targets where the developer
acknowledges that their resulting code will not be directly in line with
the rules of the \s-1ABI\s0.
! .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 will 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.
.Sp
This option is only available on SunOS and Solaris.
! .Ip "\fB\-mv8\fR" 4
.IX Item "-mv8"
.PD 0
! .Ip "\fB\-msparclite\fR" 4
.IX Item "-msparclite"
.PD
These two options select variations on the \s-1SPARC\s0 architecture.
--- 5327,5351 ----
\&\s-1ABI\s0. Thus, it's intended only for use on targets where the developer
acknowledges that their resulting code will not be directly in line with
the rules of the \s-1ABI\s0.
! .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 will 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.
.Sp
This option is only available on SunOS and Solaris.
! .IP "\fB\-mv8\fR" 4
.IX Item "-mv8"
.PD 0
! .IP "\fB\-msparclite\fR" 4
.IX Item "-msparclite"
.PD
These two options select variations on the \s-1SPARC\s0 architecture.
*************** exist in SPARClite but not in \s-1SPARC\
*** 5355,5364 ****
.Sp
These options are deprecated and will be deleted in a future \s-1GCC\s0 release.
They have been replaced with \fB\-mcpu=xxx\fR.
! .Ip "\fB\-mcypress\fR" 4
.IX Item "-mcypress"
.PD 0
! .Ip "\fB\-msupersparc\fR" 4
.IX Item "-msupersparc"
.PD
These two options select the processor for which the code is optimized.
--- 5363,5372 ----
.Sp
These options are deprecated and will be deleted in a future \s-1GCC\s0 release.
They have been replaced with \fB\-mcpu=xxx\fR.
! .IP "\fB\-mcypress\fR" 4
.IX Item "-mcypress"
.PD 0
! .IP "\fB\-msupersparc\fR" 4
.IX Item "-msupersparc"
.PD
These two options select the processor for which the code is optimized.
*************** of the full \s-1SPARC\s0 v8 instruction
*** 5373,5379 ****
.Sp
These options are deprecated and will be deleted in a future \s-1GCC\s0 release.
They have been replaced with \fB\-mcpu=xxx\fR.
! .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
--- 5381,5387 ----
.Sp
These options are deprecated and will be deleted in a future \s-1GCC\s0 release.
They have been replaced with \fB\-mcpu=xxx\fR.
! .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
*************** implementations.
*** 5396,5402 ****
\& sparclet: tsc701
\& v9: ultrasparc, ultrasparc3
.Ve
! .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
--- 5404,5410 ----
\& sparclet: tsc701
\& v9: ultrasparc, ultrasparc3
.Ve
! .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
*************** that select a particular cpu implementat
*** 5411,5425 ****
.PP
These \fB\-m\fR switches are supported in addition to the above
on the \s-1SPARCLET\s0 processor.
! .Ip "\fB\-mlittle-endian\fR" 4
.IX Item "-mlittle-endian"
Generate code for a processor running in little-endian mode.
! .Ip "\fB\-mlive-g0\fR" 4
.IX Item "-mlive-g0"
! Treat register \f(CW\*(C`%g0\*(C'\fR as a normal register.
\&\s-1GCC\s0 will continue to clobber it as necessary but will not assume
it always reads as 0.
! .Ip "\fB\-mbroken-saverestore\fR" 4
.IX Item "-mbroken-saverestore"
Generate code that does not use non-trivial forms of the \f(CW\*(C`save\*(C'\fR and
\&\f(CW\*(C`restore\*(C'\fR instructions. Early versions of the \s-1SPARCLET\s0 processor do
--- 5419,5433 ----
.PP
These \fB\-m\fR switches are supported in addition to the above
on the \s-1SPARCLET\s0 processor.
! .IP "\fB\-mlittle\-endian\fR" 4
.IX Item "-mlittle-endian"
Generate code for a processor running in little-endian mode.
! .IP "\fB\-mlive\-g0\fR" 4
.IX Item "-mlive-g0"
! Treat register \f(CW%g0\fR as a normal register.
\&\s-1GCC\s0 will continue to clobber it as necessary but will not assume
it always reads as 0.
! .IP "\fB\-mbroken\-saverestore\fR" 4
.IX Item "-mbroken-saverestore"
Generate code that does not use non-trivial forms of the \f(CW\*(C`save\*(C'\fR and
\&\f(CW\*(C`restore\*(C'\fR instructions. Early versions of the \s-1SPARCLET\s0 processor do
*************** handlers.
*** 5432,5521 ****
.PP
These \fB\-m\fR switches are supported in addition to the above
on \s-1SPARC\s0 V9 processors in 64\-bit environments.
! .Ip "\fB\-mlittle-endian\fR" 4
.IX Item "-mlittle-endian"
Generate code for a processor running in little-endian mode. It is only
available for a few configurations and most notably not on Solaris.
! .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=medlow\fR" 4
.IX Item "-mcmodel=medlow"
Generate code for the Medium/Low code model: the program must be linked
in the low 32 bits of the address space. Pointers are 64 bits.
Programs can be statically or dynamically linked.
! .Ip "\fB\-mcmodel=medmid\fR" 4
.IX Item "-mcmodel=medmid"
Generate code for the Medium/Middle code model: the program must be linked
in the low 44 bits of the address space, the text segment must be less than
2G bytes, and data segment must be within 2G of the text segment.
Pointers are 64 bits.
! .Ip "\fB\-mcmodel=medany\fR" 4
.IX Item "-mcmodel=medany"
Generate code for the Medium/Anywhere code model: the program may be linked
anywhere in the address space, the text segment must be less than
2G bytes, and data segment must be within 2G of the text segment.
Pointers are 64 bits.
! .Ip "\fB\-mcmodel=embmedany\fR" 4
.IX Item "-mcmodel=embmedany"
Generate code for the Medium/Anywhere code model for embedded systems:
assume a 32\-bit text and a 32\-bit data segment, both starting anywhere
(determined at link time). Register \f(CW%g4\fR points to the base of the
data segment. Pointers are still 64 bits.
Programs are statically linked, \s-1PIC\s0 is not supported.
! .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.
Otherwise, assume no such offset is present.
.PP
! .I "\s-1ARM\s0 Options"
.IX Subsection "ARM Options"
.PP
These \fB\-m\fR options are defined for Advanced \s-1RISC\s0 Machines (\s-1ARM\s0)
architectures:
! .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 will cause the stack frames not to be generated for
! leaf functions. The default is \fB\-mno-apcs-frame\fR.
! .Ip "\fB\-mapcs\fR" 4
.IX Item "-mapcs"
! This is a synonym for \fB\-mapcs-frame\fR.
! .Ip "\fB\-mapcs-26\fR" 4
.IX Item "-mapcs-26"
Generate code for a processor running with a 26\-bit program counter,
and conforming to the function calling standards for the \s-1APCS\s0 26\-bit
option. This option replaces the \fB\-m2\fR and \fB\-m3\fR options
of previous releases of the compiler.
! .Ip "\fB\-mapcs-32\fR" 4
.IX Item "-mapcs-32"
Generate code for a processor running with a 32\-bit program counter,
and conforming to the function calling standards for the \s-1APCS\s0 32\-bit
option. This option replaces the \fB\-m6\fR option of previous releases
of the compiler.
! .Ip "\fB\-mthumb-interwork\fR" 4
.IX Item "-mthumb-interwork"
Generate code which supports calling between the \s-1ARM\s0 and Thumb
instruction sets. Without this option 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.
! .Ip "\fB\-mno-sched-prolog\fR" 4
.IX Item "-mno-sched-prolog"
Prevent the reordering of instructions in the function prolog, or the
merging of those instruction with the instructions in the function's
--- 5440,5543 ----
.PP
These \fB\-m\fR switches are supported in addition to the above
on \s-1SPARC\s0 V9 processors in 64\-bit environments.
! .IP "\fB\-mlittle\-endian\fR" 4
.IX Item "-mlittle-endian"
Generate code for a processor running in little-endian mode. It is only
available for a few configurations and most notably not on Solaris.
! .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=medlow\fR" 4
.IX Item "-mcmodel=medlow"
Generate code for the Medium/Low code model: the program must be linked
in the low 32 bits of the address space. Pointers are 64 bits.
Programs can be statically or dynamically linked.
! .IP "\fB\-mcmodel=medmid\fR" 4
.IX Item "-mcmodel=medmid"
Generate code for the Medium/Middle code model: the program must be linked
in the low 44 bits of the address space, the text segment must be less than
2G bytes, and data segment must be within 2G of the text segment.
Pointers are 64 bits.
! .IP "\fB\-mcmodel=medany\fR" 4
.IX Item "-mcmodel=medany"
Generate code for the Medium/Anywhere code model: the program may be linked
anywhere in the address space, the text segment must be less than
2G bytes, and data segment must be within 2G of the text segment.
Pointers are 64 bits.
! .IP "\fB\-mcmodel=embmedany\fR" 4
.IX Item "-mcmodel=embmedany"
Generate code for the Medium/Anywhere code model for embedded systems:
assume a 32\-bit text and a 32\-bit data segment, both starting anywhere
(determined at link time). Register \f(CW%g4\fR points to the base of the
data segment. Pointers are still 64 bits.
Programs are statically linked, \s-1PIC\s0 is not supported.
! .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.
Otherwise, assume no such offset is present.
.PP
! These switches are supported in addition to the above on Solaris:
! .IP "\fB\-threads\fR" 4
! .IX Item "-threads"
! Add support for multithreading using the Solaris threads library. This
! option sets flags for both the preprocessor and linker. This option does
! not affect the thread safety of object code produced by the compiler or
! that of libraries supplied with it.
! .IP "\fB\-pthreads\fR" 4
! .IX Item "-pthreads"
! Add support for multithreading using the \s-1POSIX\s0 threads library. This
! option sets flags for both the preprocessor and linker. This option does
! not affect the thread safety of object code produced by the compiler or
! that of libraries supplied with it.
! .PP
! \fI\s-1ARM\s0 Options\fR
.IX Subsection "ARM Options"
.PP
These \fB\-m\fR options are defined for Advanced \s-1RISC\s0 Machines (\s-1ARM\s0)
architectures:
! .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 will cause the stack frames not to be generated for
! leaf functions. The default is \fB\-mno\-apcs\-frame\fR.
! .IP "\fB\-mapcs\fR" 4
.IX Item "-mapcs"
! This is a synonym for \fB\-mapcs\-frame\fR.
! .IP "\fB\-mapcs\-26\fR" 4
.IX Item "-mapcs-26"
Generate code for a processor running with a 26\-bit program counter,
and conforming to the function calling standards for the \s-1APCS\s0 26\-bit
option. This option replaces the \fB\-m2\fR and \fB\-m3\fR options
of previous releases of the compiler.
! .IP "\fB\-mapcs\-32\fR" 4
.IX Item "-mapcs-32"
Generate code for a processor running with a 32\-bit program counter,
and conforming to the function calling standards for the \s-1APCS\s0 32\-bit
option. This option replaces the \fB\-m6\fR option of previous releases
of the compiler.
! .IP "\fB\-mthumb\-interwork\fR" 4
.IX Item "-mthumb-interwork"
Generate code which supports calling between the \s-1ARM\s0 and Thumb
instruction sets. Without this option 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.
! .IP "\fB\-mno\-sched\-prolog\fR" 4
.IX Item "-mno-sched-prolog"
Prevent the reordering of instructions in the function prolog, or the
merging of those instruction with the instructions in the function's
*************** body. This means that all functions wil
*** 5523,5556 ****
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 if functions inside an executable piece of code. The
! default is \fB\-msched-prolog\fR.
! .Ip "\fB\-mhard-float\fR" 4
.IX Item "-mhard-float"
Generate output containing floating point instructions. This is the
default.
! .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-1ARM\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\-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\-mwords-little-endian\fR" 4
.IX Item "-mwords-little-endian"
This option only applies when generating code for big-endian processors.
Generate code for a little-endian word order but a big-endian byte
--- 5545,5578 ----
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 if functions inside an executable piece of code. The
! default is \fB\-msched\-prolog\fR.
! .IP "\fB\-mhard\-float\fR" 4
.IX Item "-mhard-float"
Generate output containing floating point instructions. This is the
default.
! .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-1ARM\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\-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\-mwords\-little\-endian\fR" 4
.IX Item "-mwords-little-endian"
This option only applies when generating code for big-endian processors.
Generate code for a little-endian word order but a big-endian byte
*************** order. That is, a byte order of the for
*** 5558,5564 ****
option should only be used if you require compatibility with code for
big-endian \s-1ARM\s0 processors generated by versions of the compiler prior to
2.8.
! .Ip "\fB\-malignment-traps\fR" 4
.IX Item "-malignment-traps"
Generate code that will not trap if the \s-1MMU\s0 has alignment traps enabled.
On \s-1ARM\s0 architectures prior to ARMv4, there were no instructions to
--- 5580,5586 ----
option should only be used if you require compatibility with code for
big-endian \s-1ARM\s0 processors generated by versions of the compiler prior to
2.8.
! .IP "\fB\-malignment\-traps\fR" 4
.IX Item "-malignment-traps"
Generate code that will not trap if the \s-1MMU\s0 has alignment traps enabled.
On \s-1ARM\s0 architectures prior to ARMv4, there were no instructions to
*************** address is aligned to a word boundary.
*** 5574,5580 ****
This option is ignored when compiling for \s-1ARM\s0 architecture 4 or later,
since these processors have instructions to directly access half-word
objects in memory.
! .Ip "\fB\-mno-alignment-traps\fR" 4
.IX Item "-mno-alignment-traps"
Generate code that assumes that the \s-1MMU\s0 will not trap unaligned
accesses. This produces better code when the target instruction set
--- 5596,5602 ----
This option is ignored when compiling for \s-1ARM\s0 architecture 4 or later,
since these processors have instructions to directly access half-word
objects in memory.
! .IP "\fB\-mno\-alignment\-traps\fR" 4
.IX Item "-mno-alignment-traps"
Generate code that assumes that the \s-1MMU\s0 will not trap unaligned
accesses. This produces better code when the target instruction set
*************** Note that you cannot use this option to
*** 5585,5608 ****
since the processor will only fetch one 32\-bit aligned object from
memory.
.Sp
! The default setting for most targets is \fB\-mno-alignment-traps\fR, since
this produces better code when there are no half-word memory
instructions available.
! .Ip "\fB\-mshort-load-bytes\fR" 4
.IX Item "-mshort-load-bytes"
.PD 0
! .Ip "\fB\-mno-short-load-words\fR" 4
.IX Item "-mno-short-load-words"
.PD
! These are deprecated aliases for \fB\-malignment-traps\fR.
! .Ip "\fB\-mno-short-load-bytes\fR" 4
.IX Item "-mno-short-load-bytes"
.PD 0
! .Ip "\fB\-mshort-load-words\fR" 4
.IX Item "-mshort-load-words"
.PD
! This are deprecated aliases for \fB\-mno-alignment-traps\fR.
! .Ip "\fB\-mcpu=\fR\fIname\fR" 4
.IX Item "-mcpu=name"
This specifies the name of the target \s-1ARM\s0 processor. \s-1GCC\s0 uses this name
to determine what kind of instructions it can emit when generating
--- 5607,5630 ----
since the processor will only fetch one 32\-bit aligned object from
memory.
.Sp
! The default setting for most targets is \fB\-mno\-alignment\-traps\fR, since
this produces better code when there are no half-word memory
instructions available.
! .IP "\fB\-mshort\-load\-bytes\fR" 4
.IX Item "-mshort-load-bytes"
.PD 0
! .IP "\fB\-mno\-short\-load\-words\fR" 4
.IX Item "-mno-short-load-words"
.PD
! These are deprecated aliases for \fB\-malignment\-traps\fR.
! .IP "\fB\-mno\-short\-load\-bytes\fR" 4
.IX Item "-mno-short-load-bytes"
.PD 0
! .IP "\fB\-mshort\-load\-words\fR" 4
.IX Item "-mshort-load-words"
.PD
! This are deprecated aliases for \fB\-mno\-alignment\-traps\fR.
! .IP "\fB\-mcpu=\fR\fIname\fR" 4
.IX Item "-mcpu=name"
This specifies the name of the target \s-1ARM\s0 processor. \s-1GCC\s0 uses this name
to determine what kind of instructions it can emit when generating
*************** assembly code. Permissible names are: \
*** 5616,5622 ****
\&\fBarm8\fR, \fBarm810\fR, \fBarm9\fR, \fBarm9e\fR, \fBarm920\fR,
\&\fBarm920t\fR, \fBarm940t\fR, \fBarm9tdmi\fR, \fBarm10tdmi\fR,
\&\fBarm1020t\fR, \fBxscale\fR.
! .Ip "\fB\-mtune=\fR\fIname\fR" 4
.IX Item "-mtune=name"
This option is very similar to the \fB\-mcpu=\fR option, except that
instead of specifying the actual target processor type, and hence
--- 5638,5644 ----
\&\fBarm8\fR, \fBarm810\fR, \fBarm9\fR, \fBarm9e\fR, \fBarm920\fR,
\&\fBarm920t\fR, \fBarm940t\fR, \fBarm9tdmi\fR, \fBarm10tdmi\fR,
\&\fBarm1020t\fR, \fBxscale\fR.
! .IP "\fB\-mtune=\fR\fIname\fR" 4
.IX Item "-mtune=name"
This option is very similar to the \fB\-mcpu=\fR option, except that
instead of specifying the actual target processor type, and hence
*************** specified in this option, but still choo
*** 5626,5632 ****
will generate based on the cpu specified by a \fB\-mcpu=\fR option.
For some \s-1ARM\s0 implementations better performance can be obtained by using
this option.
! .Ip "\fB\-march=\fR\fIname\fR" 4
.IX Item "-march=name"
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
--- 5648,5654 ----
will generate based on the cpu specified by a \fB\-mcpu=\fR option.
For some \s-1ARM\s0 implementations better performance can be obtained by using
this option.
! .IP "\fB\-march=\fR\fIname\fR" 4
.IX Item "-march=name"
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
*** 5634,5649 ****
of the \fB\-mcpu=\fR option. Permissible names are: \fBarmv2\fR,
\&\fBarmv2a\fR, \fBarmv3\fR, \fBarmv3m\fR, \fBarmv4\fR, \fBarmv4t\fR,
\&\fBarmv5\fR, \fBarmv5t\fR, \fBarmv5te\fR.
! .Ip "\fB\-mfpe=\fR\fInumber\fR" 4
.IX Item "-mfpe=number"
.PD 0
! .Ip "\fB\-mfp=\fR\fInumber\fR" 4
.IX Item "-mfp=number"
.PD
This specifies the version of the floating point emulation available on
the target. Permissible values are 2 and 3. \fB\-mfp=\fR is a synonym
for \fB\-mfpe=\fR, for compatibility with older versions of \s-1GCC\s0.
! .Ip "\fB\-mstructure-size-boundary=\fR\fIn\fR" 4
.IX Item "-mstructure-size-boundary=n"
The size of all structures and unions will be rounded up to a multiple
of the number of bits set by this option. Permissible values are 8 and
--- 5656,5671 ----
of the \fB\-mcpu=\fR option. Permissible names are: \fBarmv2\fR,
\&\fBarmv2a\fR, \fBarmv3\fR, \fBarmv3m\fR, \fBarmv4\fR, \fBarmv4t\fR,
\&\fBarmv5\fR, \fBarmv5t\fR, \fBarmv5te\fR.
! .IP "\fB\-mfpe=\fR\fInumber\fR" 4
.IX Item "-mfpe=number"
.PD 0
! .IP "\fB\-mfp=\fR\fInumber\fR" 4
.IX Item "-mfp=number"
.PD
This specifies the version of the floating point emulation available on
the target. Permissible values are 2 and 3. \fB\-mfp=\fR is a synonym
for \fB\-mfpe=\fR, for compatibility with older versions of \s-1GCC\s0.
! .IP "\fB\-mstructure\-size\-boundary=\fR\fIn\fR" 4
.IX Item "-mstructure-size-boundary=n"
The size of all structures and unions will be rounded up to a multiple
of the number of bits set by this option. Permissible values are 8 and
*************** of the program. The two values are pote
*** 5654,5668 ****
compiled with one value cannot necessarily expect to work with code or
libraries compiled with the other value, if they exchange information
using structures or unions.
! .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 will be 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
--- 5676,5690 ----
compiled with one value cannot necessarily expect to work with code or
libraries compiled with the other value, if they exchange information
using structures or unions.
! .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 will be 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
*************** the scope of a \fB#pragma long_calls\fR
*** 5683,5707 ****
turned into long calls.
.Sp
This feature is not enabled by default. Specifying
! \&\fB\-mno-long-calls\fR will restore the default behavior, as will
placing the function calls within the scope of a \fB#pragma
long_calls_off\fR directive. Note these switches have no effect on how
the compiler generates code to handle function calls via function
pointers.
! .Ip "\fB\-mnop-fun-dllimport\fR" 4
.IX Item "-mnop-fun-dllimport"
Disable support for the \f(CW\*(C`dllimport\*(C'\fR attribute.
! .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 run-time 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. The default is R10
unless stack-checking is enabled, when R9 is used.
! .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:
--- 5705,5729 ----
turned into long calls.
.Sp
This feature is not enabled by default. Specifying
! \&\fB\-mno\-long\-calls\fR will restore the default behavior, as will
placing the function calls within the scope of a \fB#pragma
long_calls_off\fR directive. Note these switches have no effect on how
the compiler generates code to handle function calls via function
pointers.
! .IP "\fB\-mnop\-fun\-dllimport\fR" 4
.IX Item "-mnop-fun-dllimport"
Disable support for the \f(CW\*(C`dllimport\*(C'\fR attribute.
! .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 run-time 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. The default is R10
unless stack-checking is enabled, when R9 is used.
! .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:
*************** preceding the function prologue. The ge
*** 5717,5759 ****
\& stmfd sp!, {fp, ip, lr, pc}
\& sub fp, ip, #4
.Ve
When performing a stack backtrace, code can inspect the value of
\&\f(CW\*(C`pc\*(C'\fR stored at \f(CW\*(C`fp + 0\*(C'\fR. If the trace function then looks at
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"
Generate code for the 16\-bit Thumb instruction set. The default is to
use the 32\-bit \s-1ARM\s0 instruction set.
! .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.
! .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.
.PP
! .I "\s-1MN10200\s0 Options"
.IX Subsection "MN10200 Options"
.PP
These \fB\-m\fR options are defined for Matsushita \s-1MN10200\s0 architectures:
! .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
--- 5739,5782 ----
\& stmfd sp!, {fp, ip, lr, pc}
\& sub fp, ip, #4
.Ve
+ .Sp
When performing a stack backtrace, code can inspect the value of
\&\f(CW\*(C`pc\*(C'\fR stored at \f(CW\*(C`fp + 0\*(C'\fR. If the trace function then looks at
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"
Generate code for the 16\-bit Thumb instruction set. The default is to
use the 32\-bit \s-1ARM\s0 instruction set.
! .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.
! .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.
.PP
! \fI\s-1MN10200\s0 Options\fR
.IX Subsection "MN10200 Options"
.PP
These \fB\-m\fR options are defined for Matsushita \s-1MN10200\s0 architectures:
! .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 l
*** 5761,5789 ****
.Sp
This option makes symbolic debugging impossible.
.PP
! .I "\s-1MN10300\s0 Options"
.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 which uses features specific to the \s-1AM33\s0 processor.
! .Ip "\fB\-mno-am33\fR" 4
.IX Item "-mno-am33"
Do not generate code which uses features specific to the \s-1AM33\s0 processor. This
is the default.
! .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
--- 5784,5812 ----
.Sp
This option makes symbolic debugging impossible.
.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 which uses features specific to the \s-1AM33\s0 processor.
! .IP "\fB\-mno\-am33\fR" 4
.IX Item "-mno-am33"
Do not generate code which uses features specific to the \s-1AM33\s0 processor. This
is the default.
! .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 l
*** 5791,5807 ****
.Sp
This option makes symbolic debugging impossible.
.PP
! .I "M32R/D Options"
.IX Subsection "M32R/D Options"
.PP
These \fB\-m\fR options are defined for Mitsubishi M32R/D architectures:
! .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\-mcode-model=small\fR" 4
.IX Item "-mcode-model=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
--- 5814,5830 ----
.Sp
This option makes symbolic debugging impossible.
.PP
! \fIM32R/D Options\fR
.IX Subsection "M32R/D Options"
.PP
These \fB\-m\fR options are defined for Mitsubishi M32R/D architectures:
! .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\-mcode\-model=small\fR" 4
.IX Item "-mcode-model=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.
*** 5810,5828 ****
.Sp
The addressability of a particular object can be set with the
\&\f(CW\*(C`model\*(C'\fR attribute.
! .Ip "\fB\-mcode-model=medium\fR" 4
.IX Item "-mcode-model=medium"
Assume objects may be anywhere in the 32\-bit address space (the compiler
will generate \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\-mcode-model=large\fR" 4
.IX Item "-mcode-model=large"
Assume objects may be anywhere in the 32\-bit address space (the compiler
will generate \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 will generate 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 will be put into
one of \fB.data\fR, \fBbss\fR, or \fB.rodata\fR (unless the
--- 5833,5851 ----
.Sp
The addressability of a particular object can be set with the
\&\f(CW\*(C`model\*(C'\fR attribute.
! .IP "\fB\-mcode\-model=medium\fR" 4
.IX Item "-mcode-model=medium"
Assume objects may be anywhere in the 32\-bit address space (the compiler
will generate \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\-mcode\-model=large\fR" 4
.IX Item "-mcode-model=large"
Assume objects may be anywhere in the 32\-bit address space (the compiler
will generate \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 will generate 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 will be put into
one of \fB.data\fR, \fBbss\fR, or \fB.rodata\fR (unless the
*************** This is the default.
*** 5832,5846 ****
The small data area consists of sections \fB.sdata\fR and \fB.sbss\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
--- 5855,5869 ----
The small data area consists of sections \fB.sdata\fR and \fB.sbss\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
*************** Compiling with different values of \fInu
*** 5853,5892 ****
doesn't the linker will give an error message\-\-\-incorrect code will not be
generated.
.PP
! .I "M88K Options"
.IX Subsection "M88K Options"
.PP
These \fB\-m\fR options are defined for Motorola 88k architectures:
! .Ip "\fB\-m88000\fR" 4
.IX Item "-m88000"
Generate code that works well on both the m88100 and the
m88110.
! .Ip "\fB\-m88100\fR" 4
.IX Item "-m88100"
Generate code that works best for the m88100, but that also
runs on the m88110.
! .Ip "\fB\-m88110\fR" 4
.IX Item "-m88110"
Generate code that works best for the m88110, and may not run
on the m88100.
! .Ip "\fB\-mbig-pic\fR" 4
.IX Item "-mbig-pic"
Obsolete option to be removed from the next revision.
Use \fB\-fPIC\fR.
! .Ip "\fB\-midentify-revision\fR" 4
.IX Item "-midentify-revision"
Include an \f(CW\*(C`ident\*(C'\fR directive in the assembler output recording the
source file name, compiler name and version, timestamp, and compilation
flags used.
! .Ip "\fB\-mno-underscores\fR" 4
.IX Item "-mno-underscores"
In assembler output, emit symbol names without adding an underscore
character at the beginning of each name. The default is to use an
underscore as prefix on each name.
! .Ip "\fB\-mocs-debug-info\fR" 4
.IX Item "-mocs-debug-info"
.PD 0
! .Ip "\fB\-mno-ocs-debug-info\fR" 4
.IX Item "-mno-ocs-debug-info"
.PD
Include (or omit) additional debugging information (about registers used
--- 5876,5915 ----
doesn't the linker will give an error message\-\-\-incorrect code will not be
generated.
.PP
! \fIM88K Options\fR
.IX Subsection "M88K Options"
.PP
These \fB\-m\fR options are defined for Motorola 88k architectures:
! .IP "\fB\-m88000\fR" 4
.IX Item "-m88000"
Generate code that works well on both the m88100 and the
m88110.
! .IP "\fB\-m88100\fR" 4
.IX Item "-m88100"
Generate code that works best for the m88100, but that also
runs on the m88110.
! .IP "\fB\-m88110\fR" 4
.IX Item "-m88110"
Generate code that works best for the m88110, and may not run
on the m88100.
! .IP "\fB\-mbig\-pic\fR" 4
.IX Item "-mbig-pic"
Obsolete option to be removed from the next revision.
Use \fB\-fPIC\fR.
! .IP "\fB\-midentify\-revision\fR" 4
.IX Item "-midentify-revision"
Include an \f(CW\*(C`ident\*(C'\fR directive in the assembler output recording the
source file name, compiler name and version, timestamp, and compilation
flags used.
! .IP "\fB\-mno\-underscores\fR" 4
.IX Item "-mno-underscores"
In assembler output, emit symbol names without adding an underscore
character at the beginning of each name. The default is to use an
underscore as prefix on each name.
! .IP "\fB\-mocs\-debug\-info\fR" 4
.IX Item "-mocs-debug-info"
.PD 0
! .IP "\fB\-mno\-ocs\-debug\-info\fR" 4
.IX Item "-mno-ocs-debug-info"
.PD
Include (or omit) additional debugging information (about registers used
*************** Standard, ``\s-1OCS\s0''. This extra in
*** 5895,5938 ****
has had the frame pointer eliminated. The default for SVr4 and Delta 88
SVr3.2 is to include this information; other 88k configurations omit this
information by default.
! .Ip "\fB\-mocs-frame-position\fR" 4
.IX Item "-mocs-frame-position"
When emitting \s-1COFF\s0 debugging information for automatic variables and
parameters stored on the stack, use the offset from the canonical frame
address, which is the stack pointer (register 31) on entry to the
function. The SVr4 and Delta88 SVr3.2, and \s-1BCS\s0 configurations use
! \&\fB\-mocs-frame-position\fR; other 88k configurations have the default
! \&\fB\-mno-ocs-frame-position\fR.
! .Ip "\fB\-mno-ocs-frame-position\fR" 4
.IX Item "-mno-ocs-frame-position"
When emitting \s-1COFF\s0 debugging information for automatic variables and
parameters stored on the stack, use the offset from the frame pointer
register (register 30). When this option is in effect, the frame
pointer is not eliminated when debugging information is selected by the
\&\-g switch.
! .Ip "\fB\-moptimize-arg-area\fR" 4
.IX Item "-moptimize-arg-area"
Save space by reorganizing the stack frame. This option generates code
that does not agree with the 88open specifications, but uses less
memory.
! .Ip "\fB\-mno-optimize-arg-area\fR" 4
.IX Item "-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.
! .Ip "\fB\-mshort-data-\fR\fInum\fR" 4
.IX Item "-mshort-data-num"
Generate smaller data references by making them relative to \f(CW\*(C`r0\*(C'\fR,
which allows loading a value using a single instruction (rather than the
usual two). You control which data references are affected by
specifying \fInum\fR with this option. For example, if you specify
! \&\fB\-mshort-data-512\fR, then the data references affected are those
involving displacements of less than 512 bytes.
! \&\fB\-mshort-data-\fR\fInum\fR is not effective for \fInum\fR greater
than 64k.
! .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
Do, or don't, generate code to guarantee sequential consistency
--- 5918,5961 ----
has had the frame pointer eliminated. The default for SVr4 and Delta 88
SVr3.2 is to include this information; other 88k configurations omit this
information by default.
! .IP "\fB\-mocs\-frame\-position\fR" 4
.IX Item "-mocs-frame-position"
When emitting \s-1COFF\s0 debugging information for automatic variables and
parameters stored on the stack, use the offset from the canonical frame
address, which is the stack pointer (register 31) on entry to the
function. The SVr4 and Delta88 SVr3.2, and \s-1BCS\s0 configurations use
! \&\fB\-mocs\-frame\-position\fR; other 88k configurations have the default
! \&\fB\-mno\-ocs\-frame\-position\fR.
! .IP "\fB\-mno\-ocs\-frame\-position\fR" 4
.IX Item "-mno-ocs-frame-position"
When emitting \s-1COFF\s0 debugging information for automatic variables and
parameters stored on the stack, use the offset from the frame pointer
register (register 30). When this option is in effect, the frame
pointer is not eliminated when debugging information is selected by the
\&\-g switch.
! .IP "\fB\-moptimize\-arg\-area\fR" 4
.IX Item "-moptimize-arg-area"
Save space by reorganizing the stack frame. This option generates code
that does not agree with the 88open specifications, but uses less
memory.
! .IP "\fB\-mno\-optimize\-arg\-area\fR" 4
.IX Item "-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.
! .IP "\fB\-mshort\-data\-\fR\fInum\fR" 4
.IX Item "-mshort-data-num"
Generate smaller data references by making them relative to \f(CW\*(C`r0\*(C'\fR,
which allows loading a value using a single instruction (rather than the
usual two). You control which data references are affected by
specifying \fInum\fR with this option. For example, if you specify
! \&\fB\-mshort\-data\-512\fR, then the data references affected are those
involving displacements of less than 512 bytes.
! \&\fB\-mshort\-data\-\fR\fInum\fR is not effective for \fInum\fR greater
than 64k.
! .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
Do, or don't, generate code to guarantee sequential consistency
*************** always provides sequential consistency.
*** 5953,5993 ****
generates the special instructions to guarantee consistency
even when you use \fB\-m88100\fR, so that the code may be run on an
\&\s-1MC88110\s0 processor. If you intend to run your code only on the
! \&\s-1MC88100\s0 processor, you may use \fB\-mno-serialize-volatile\fR.
.Sp
The extra code generated to guarantee consistency may affect the
performance of your application. If you know that you can safely
! forgo this guarantee, you may use \fB\-mno-serialize-volatile\fR.
! .Ip "\fB\-msvr4\fR" 4
.IX Item "-msvr4"
.PD 0
! .Ip "\fB\-msvr3\fR" 4
.IX Item "-msvr3"
.PD
Turn on (\fB\-msvr4\fR) or off (\fB\-msvr3\fR) compiler extensions
related to System V release 4 (SVr4). This controls the following:
.RS 4
! .Ip "1." 4
Which variant of the assembler syntax to emit.
! .Ip "2." 4
\&\fB\-msvr4\fR makes the C preprocessor recognize \fB#pragma weak\fR
that is used on System V release 4.
! .Ip "3." 4
\&\fB\-msvr4\fR makes \s-1GCC\s0 issue additional declaration directives used in
SVr4.
.RE
.RS 4
.Sp
! \&\fB\-msvr4\fR is the default for the m88k-motorola-sysv4 configuration.
\&\fB\-msvr3\fR is the default for all other m88k configurations.
.RE
! .Ip "\fB\-mversion-03.00\fR" 4
.IX Item "-mversion-03.00"
This option is obsolete, and is ignored.
! .Ip "\fB\-mno-check-zero-division\fR" 4
.IX Item "-mno-check-zero-division"
.PD 0
! .Ip "\fB\-mcheck-zero-division\fR" 4
.IX Item "-mcheck-zero-division"
.PD
Do, or don't, generate code to guarantee that integer division by
--- 5976,6016 ----
generates the special instructions to guarantee consistency
even when you use \fB\-m88100\fR, so that the code may be run on an
\&\s-1MC88110\s0 processor. If you intend to run your code only on the
! \&\s-1MC88100\s0 processor, you may use \fB\-mno\-serialize\-volatile\fR.
.Sp
The extra code generated to guarantee consistency may affect the
performance of your application. If you know that you can safely
! forgo this guarantee, you may use \fB\-mno\-serialize\-volatile\fR.
! .IP "\fB\-msvr4\fR" 4
.IX Item "-msvr4"
.PD 0
! .IP "\fB\-msvr3\fR" 4
.IX Item "-msvr3"
.PD
Turn on (\fB\-msvr4\fR) or off (\fB\-msvr3\fR) compiler extensions
related to System V release 4 (SVr4). This controls the following:
.RS 4
! .IP "1." 4
Which variant of the assembler syntax to emit.
! .IP "2." 4
\&\fB\-msvr4\fR makes the C preprocessor recognize \fB#pragma weak\fR
that is used on System V release 4.
! .IP "3." 4
\&\fB\-msvr4\fR makes \s-1GCC\s0 issue additional declaration directives used in
SVr4.
.RE
.RS 4
.Sp
! \&\fB\-msvr4\fR is the default for the m88k\-motorola\-sysv4 configuration.
\&\fB\-msvr3\fR is the default for all other m88k configurations.
.RE
! .IP "\fB\-mversion\-03.00\fR" 4
.IX Item "-mversion-03.00"
This option is obsolete, and is ignored.
! .IP "\fB\-mno\-check\-zero\-division\fR" 4
.IX Item "-mno-check-zero-division"
.PD 0
! .IP "\fB\-mcheck\-zero\-division\fR" 4
.IX Item "-mcheck-zero-division"
.PD
Do, or don't, generate code to guarantee that integer division by
*************** division by zero under certain condition
*** 5998,6012 ****
compiling code that might be run on such a processor, \s-1GCC\s0
generates code that explicitly checks for zero-valued divisors
and traps with exception number 503 when one is detected. Use of
! \&\fB\-mno-check-zero-division\fR suppresses such checking for code
generated to run on an \s-1MC88100\s0 processor.
.Sp
\&\s-1GCC\s0 assumes that the \s-1MC88110\s0 processor correctly detects all instances
of integer division by zero. When \fB\-m88110\fR is specified, no
explicit checks for zero-valued divisors are generated, and both
! \&\fB\-mcheck-zero-division\fR and \fB\-mno-check-zero-division\fR are
ignored.
! .Ip "\fB\-muse-div-instruction\fR" 4
.IX Item "-muse-div-instruction"
Use the div instruction for signed integer division on the
\&\s-1MC88100\s0 processor. By default, the div instruction is not used.
--- 6021,6035 ----
compiling code that might be run on such a processor, \s-1GCC\s0
generates code that explicitly checks for zero-valued divisors
and traps with exception number 503 when one is detected. Use of
! \&\fB\-mno\-check\-zero\-division\fR suppresses such checking for code
generated to run on an \s-1MC88100\s0 processor.
.Sp
\&\s-1GCC\s0 assumes that the \s-1MC88110\s0 processor correctly detects all instances
of integer division by zero. When \fB\-m88110\fR is specified, no
explicit checks for zero-valued divisors are generated, and both
! \&\fB\-mcheck\-zero\-division\fR and \fB\-mno\-check\-zero\-division\fR are
ignored.
! .IP "\fB\-muse\-div\-instruction\fR" 4
.IX Item "-muse-div-instruction"
Use the div instruction for signed integer division on the
\&\s-1MC88100\s0 processor. By default, the div instruction is not used.
*************** instruction directly.
*** 6027,6082 ****
On the \s-1MC88110\s0 processor the div instruction (also known as the
divs instruction) processes negative operands without trapping to
the operating system. When \fB\-m88110\fR is specified,
! \&\fB\-muse-div-instruction\fR is ignored, and the div instruction is used
for signed integer division.
.Sp
Note that the result of dividing \f(CW\*(C`INT_MIN\*(C'\fR by \-1 is undefined. In
particular, the behavior of such a division with and without
! \&\fB\-muse-div-instruction\fR may differ.
! .Ip "\fB\-mtrap-large-shift\fR" 4
.IX Item "-mtrap-large-shift"
.PD 0
! .Ip "\fB\-mhandle-large-shift\fR" 4
.IX Item "-mhandle-large-shift"
.PD
Include code to detect bit-shifts of more than 31 bits; respectively,
trap such shifts or emit code to handle them properly. By default \s-1GCC\s0
makes no special provision for large bit shifts.
! .Ip "\fB\-mwarn-passed-structs\fR" 4
.IX Item "-mwarn-passed-structs"
Warn when a function passes a struct as an argument or result.
Structure-passing conventions have changed during the evolution of the C
language, and are often the source of portability problems. By default,
\&\s-1GCC\s0 issues no such warning.
.PP
! .I "\s-1IBM\s0 \s-1RS/6000\s0 and PowerPC Options"
.IX Subsection "IBM RS/6000 and PowerPC Options"
.PP
These \fB\-m\fR options are defined for the \s-1IBM\s0 \s-1RS/6000\s0 and PowerPC:
! .Ip "\fB\-mpower\fR" 4
.IX Item "-mpower"
.PD 0
! .Ip "\fB\-mno-power\fR" 4
.IX Item "-mno-power"
! .Ip "\fB\-mpower2\fR" 4
.IX Item "-mpower2"
! .Ip "\fB\-mno-power2\fR" 4
.IX Item "-mno-power2"
! .Ip "\fB\-mpowerpc\fR" 4
.IX Item "-mpowerpc"
! .Ip "\fB\-mno-powerpc\fR" 4
.IX Item "-mno-powerpc"
! .Ip "\fB\-mpowerpc-gpopt\fR" 4
.IX Item "-mpowerpc-gpopt"
! .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"
.PD
\&\s-1GCC\s0 supports two related instruction set architectures for the
--- 6050,6105 ----
On the \s-1MC88110\s0 processor the div instruction (also known as the
divs instruction) processes negative operands without trapping to
the operating system. When \fB\-m88110\fR is specified,
! \&\fB\-muse\-div\-instruction\fR is ignored, and the div instruction is used
for signed integer division.
.Sp
Note that the result of dividing \f(CW\*(C`INT_MIN\*(C'\fR by \-1 is undefined. In
particular, the behavior of such a division with and without
! \&\fB\-muse\-div\-instruction\fR may differ.
! .IP "\fB\-mtrap\-large\-shift\fR" 4
.IX Item "-mtrap-large-shift"
.PD 0
! .IP "\fB\-mhandle\-large\-shift\fR" 4
.IX Item "-mhandle-large-shift"
.PD
Include code to detect bit-shifts of more than 31 bits; respectively,
trap such shifts or emit code to handle them properly. By default \s-1GCC\s0
makes no special provision for large bit shifts.
! .IP "\fB\-mwarn\-passed\-structs\fR" 4
.IX Item "-mwarn-passed-structs"
Warn when a function passes a struct as an argument or result.
Structure-passing conventions have changed during the evolution of the C
language, and are often the source of portability problems. By default,
\&\s-1GCC\s0 issues no such warning.
.PP
! \fI\s-1IBM\s0 \s-1RS/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\s0 \s-1RS/6000\s0 and PowerPC:
! .IP "\fB\-mpower\fR" 4
.IX Item "-mpower"
.PD 0
! .IP "\fB\-mno\-power\fR" 4
.IX Item "-mno-power"
! .IP "\fB\-mpower2\fR" 4
.IX Item "-mpower2"
! .IP "\fB\-mno\-power2\fR" 4
.IX Item "-mno-power2"
! .IP "\fB\-mpowerpc\fR" 4
.IX Item "-mpowerpc"
! .IP "\fB\-mno\-powerpc\fR" 4
.IX Item "-mno-powerpc"
! .IP "\fB\-mpowerpc\-gpopt\fR" 4
.IX Item "-mpowerpc-gpopt"
! .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"
.PD
\&\s-1GCC\s0 supports two related instruction set architectures for the
*************** not the original \s-1POWER\s0 architectu
*** 6105,6147 ****
.Sp
The \fB\-mpowerpc\fR option allows \s-1GCC\s0 to generate instructions that
are found only in the 32\-bit subset of the PowerPC architecture.
! Specifying \fB\-mpowerpc-gpopt\fR implies \fB\-mpowerpc\fR and also 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 implies \fB\-mpowerpc\fR and also allows \s-1GCC\s0 to
use the optional PowerPC architecture instructions in the Graphics
group, including floating-point select.
.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.
.Sp
! If you specify both \fB\-mno-power\fR and \fB\-mno-powerpc\fR, \s-1GCC\s0
will use only the instructions in the common subset of both
architectures plus some special \s-1AIX\s0 common-mode calls, and will not use
the \s-1MQ\s0 register. Specifying both \fB\-mpower\fR and \fB\-mpowerpc\fR
permits \s-1GCC\s0 to use any instruction from either architecture and to
allow use of the \s-1MQ\s0 register; specify this for the Motorola \s-1MPC601\s0.
! .Ip "\fB\-mnew-mnemonics\fR" 4
.IX Item "-mnew-mnemonics"
.PD 0
! .Ip "\fB\-mold-mnemonics\fR" 4
.IX Item "-mold-mnemonics"
.PD
Select which mnemonics to use in the generated assembler code. With
! \&\fB\-mnew-mnemonics\fR, \s-1GCC\s0 uses the assembler mnemonics defined for
! the PowerPC architecture. With \fB\-mold-mnemonics\fR it uses the
assembler mnemonics defined for the \s-1POWER\s0 architecture. Instructions
defined in only one architecture have only one mnemonic; \s-1GCC\s0 uses that
mnemonic irrespective of which of these options is specified.
.Sp
\&\s-1GCC\s0 defaults to the mnemonics appropriate for the architecture in
use. Specifying \fB\-mcpu=\fR\fIcpu_type\fR sometimes overrides the
! value of these option. Unless you are building a cross-compiler, you
! should normally not specify either \fB\-mnew-mnemonics\fR or
! \&\fB\-mold-mnemonics\fR, but should instead accept the default.
! .Ip "\fB\-mcpu=\fR\fIcpu_type\fR" 4
.IX Item "-mcpu=cpu_type"
Set architecture type, register usage, choice of mnemonics, and
instruction scheduling parameters for machine type \fIcpu_type\fR.
--- 6128,6170 ----
.Sp
The \fB\-mpowerpc\fR option allows \s-1GCC\s0 to generate instructions that
are found only in the 32\-bit subset of the PowerPC architecture.
! Specifying \fB\-mpowerpc\-gpopt\fR implies \fB\-mpowerpc\fR and also 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 implies \fB\-mpowerpc\fR and also allows \s-1GCC\s0 to
use the optional PowerPC architecture instructions in the Graphics
group, including floating-point select.
.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.
.Sp
! If you specify both \fB\-mno\-power\fR and \fB\-mno\-powerpc\fR, \s-1GCC\s0
will use only the instructions in the common subset of both
architectures plus some special \s-1AIX\s0 common-mode calls, and will not use
the \s-1MQ\s0 register. Specifying both \fB\-mpower\fR and \fB\-mpowerpc\fR
permits \s-1GCC\s0 to use any instruction from either architecture and to
allow use of the \s-1MQ\s0 register; specify this for the Motorola \s-1MPC601\s0.
! .IP "\fB\-mnew\-mnemonics\fR" 4
.IX Item "-mnew-mnemonics"
.PD 0
! .IP "\fB\-mold\-mnemonics\fR" 4
.IX Item "-mold-mnemonics"
.PD
Select which mnemonics to use in the generated assembler code. With
! \&\fB\-mnew\-mnemonics\fR, \s-1GCC\s0 uses the assembler mnemonics defined for
! the PowerPC architecture. With \fB\-mold\-mnemonics\fR it uses the
assembler mnemonics defined for the \s-1POWER\s0 architecture. Instructions
defined in only one architecture have only one mnemonic; \s-1GCC\s0 uses that
mnemonic irrespective of which of these options is specified.
.Sp
\&\s-1GCC\s0 defaults to the mnemonics appropriate for the architecture in
use. Specifying \fB\-mcpu=\fR\fIcpu_type\fR sometimes overrides the
! value of these option. Unless you are building a cross\-compiler, you
! should normally not specify either \fB\-mnew\-mnemonics\fR or
! \&\fB\-mold\-mnemonics\fR, but should instead accept the default.
! .IP "\fB\-mcpu=\fR\fIcpu_type\fR" 4
.IX Item "-mcpu=cpu_type"
Set architecture type, register usage, choice of mnemonics, and
instruction scheduling parameters for machine type \fIcpu_type\fR.
*************** others.
*** 6171,6237 ****
The \fB\-mcpu\fR options automatically enable or disable other
\&\fB\-m\fR options as follows:
.RS 4
! .Ip "\fBcommon\fR" 4
.IX Item "common"
! \&\fB\-mno-power\fR, \fB\-mno-powerpc\fR
! .Ip "\fBpower\fR" 4
.IX Item "power"
.PD 0
! .Ip "\fBpower2\fR" 4
.IX Item "power2"
! .Ip "\fBrios1\fR" 4
.IX Item "rios1"
! .Ip "\fBrios2\fR" 4
.IX Item "rios2"
! .Ip "\fBrsc\fR" 4
.IX Item "rsc"
.PD
! \&\fB\-mpower\fR, \fB\-mno-powerpc\fR, \fB\-mno-new-mnemonics\fR
! .Ip "\fBpowerpc\fR" 4
.IX Item "powerpc"
.PD 0
! .Ip "\fBrs64a\fR" 4
.IX Item "rs64a"
! .Ip "\fB602\fR" 4
.IX Item "602"
! .Ip "\fB603\fR" 4
.IX Item "603"
! .Ip "\fB603e\fR" 4
.IX Item "603e"
! .Ip "\fB604\fR" 4
.IX Item "604"
! .Ip "\fB620\fR" 4
.IX Item "620"
! .Ip "\fB630\fR" 4
.IX Item "630"
! .Ip "\fB740\fR" 4
.IX Item "740"
! .Ip "\fB7400\fR" 4
.IX Item "7400"
! .Ip "\fB7450\fR" 4
.IX Item "7450"
! .Ip "\fB750\fR" 4
.IX Item "750"
! .Ip "\fB505\fR" 4
.IX Item "505"
.PD
! \&\fB\-mno-power\fR, \fB\-mpowerpc\fR, \fB\-mnew-mnemonics\fR
! .Ip "\fB601\fR" 4
.IX Item "601"
! \&\fB\-mpower\fR, \fB\-mpowerpc\fR, \fB\-mnew-mnemonics\fR
! .Ip "\fB403\fR" 4
.IX Item "403"
.PD 0
! .Ip "\fB821\fR" 4
.IX Item "821"
! .Ip "\fB860\fR" 4
.IX Item "860"
.PD
! \&\fB\-mno-power\fR, \fB\-mpowerpc\fR, \fB\-mnew-mnemonics\fR, \fB\-msoft-float\fR
.RE
.RS 4
.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 architecture type, register usage, or
--- 6194,6260 ----
The \fB\-mcpu\fR options automatically enable or disable other
\&\fB\-m\fR options as follows:
.RS 4
! .IP "\fBcommon\fR" 4
.IX Item "common"
! \&\fB\-mno\-power\fR, \fB\-mno\-powerpc\fR
! .IP "\fBpower\fR" 4
.IX Item "power"
.PD 0
! .IP "\fBpower2\fR" 4
.IX Item "power2"
! .IP "\fBrios1\fR" 4
.IX Item "rios1"
! .IP "\fBrios2\fR" 4
.IX Item "rios2"
! .IP "\fBrsc\fR" 4
.IX Item "rsc"
.PD
! \&\fB\-mpower\fR, \fB\-mno\-powerpc\fR, \fB\-mno\-new\-mnemonics\fR
! .IP "\fBpowerpc\fR" 4
.IX Item "powerpc"
.PD 0
! .IP "\fBrs64a\fR" 4
.IX Item "rs64a"
! .IP "\fB602\fR" 4
.IX Item "602"
! .IP "\fB603\fR" 4
.IX Item "603"
! .IP "\fB603e\fR" 4
.IX Item "603e"
! .IP "\fB604\fR" 4
.IX Item "604"
! .IP "\fB620\fR" 4
.IX Item "620"
! .IP "\fB630\fR" 4
.IX Item "630"
! .IP "\fB740\fR" 4
.IX Item "740"
! .IP "\fB7400\fR" 4
.IX Item "7400"
! .IP "\fB7450\fR" 4
.IX Item "7450"
! .IP "\fB750\fR" 4
.IX Item "750"
! .IP "\fB505\fR" 4
.IX Item "505"
.PD
! \&\fB\-mno\-power\fR, \fB\-mpowerpc\fR, \fB\-mnew\-mnemonics\fR
! .IP "\fB601\fR" 4
.IX Item "601"
! \&\fB\-mpower\fR, \fB\-mpowerpc\fR, \fB\-mnew\-mnemonics\fR
! .IP "\fB403\fR" 4
.IX Item "403"
.PD 0
! .IP "\fB821\fR" 4
.IX Item "821"
! .IP "\fB860\fR" 4
.IX Item "860"
.PD
! \&\fB\-mno\-power\fR, \fB\-mpowerpc\fR, \fB\-mnew\-mnemonics\fR, \fB\-msoft\-float\fR
.RE
.RS 4
.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 architecture type, register usage, or
*************** values for \fIcpu_type\fR are used for \
*** 6240,6282 ****
\&\fB\-mcpu\fR. If both are specified, the code generated will use the
architecture, registers, and mnemonics set by \fB\-mcpu\fR, but the
scheduling parameters set by \fB\-mtune\fR.
! .Ip "\fB\-maltivec\fR" 4
.IX Item "-maltivec"
.PD 0
! .Ip "\fB\-mno-altivec\fR" 4
.IX Item "-mno-altivec"
.PD
These switches enable or disable the use of built-in functions that
allow 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.
! .Ip "\fB\-mabi=spe\fR" 4
.IX Item "-mabi=spe"
Extend the current \s-1ABI\s0 with \s-1SPE\s0 \s-1ABI\s0 extensions. This does not change
the default \s-1ABI\s0, instead it adds the \s-1SPE\s0 \s-1ABI\s0 extensions to the current
\&\s-1ABI\s0.
! .Ip "\fB\-mabi=no-spe\fR" 4
.IX Item "-mabi=no-spe"
Disable Booke \s-1SPE\s0 \s-1ABI\s0 extensions for the current \s-1ABI\s0.
! .Ip "\fB\-misel=\fR\fIyes/no\fR" 4
.IX Item "-misel=yes/no"
.PD 0
! .Ip "\fB\-misel\fR" 4
.IX Item "-misel"
.PD
This switch enables or disables the generation of \s-1ISEL\s0 instructions.
! .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 will allocate at least one \s-1TOC\s0 entry for
each unique non-automatic variable reference in your program. \s-1GCC\s0
will also place floating-point constants in the \s-1TOC\s0. However, only
--- 6263,6305 ----
\&\fB\-mcpu\fR. If both are specified, the code generated will use the
architecture, registers, and mnemonics set by \fB\-mcpu\fR, but the
scheduling parameters set by \fB\-mtune\fR.
! .IP "\fB\-maltivec\fR" 4
.IX Item "-maltivec"
.PD 0
! .IP "\fB\-mno\-altivec\fR" 4
.IX Item "-mno-altivec"
.PD
These switches enable or disable the use of built-in functions that
allow 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.
! .IP "\fB\-mabi=spe\fR" 4
.IX Item "-mabi=spe"
Extend the current \s-1ABI\s0 with \s-1SPE\s0 \s-1ABI\s0 extensions. This does not change
the default \s-1ABI\s0, instead it adds the \s-1SPE\s0 \s-1ABI\s0 extensions to the current
\&\s-1ABI\s0.
! .IP "\fB\-mabi=no\-spe\fR" 4
.IX Item "-mabi=no-spe"
Disable Booke \s-1SPE\s0 \s-1ABI\s0 extensions for the current \s-1ABI\s0.
! .IP "\fB\-misel=\fR\fIyes/no\fR" 4
.IX Item "-misel=yes/no"
.PD 0
! .IP "\fB\-misel\fR" 4
.IX Item "-misel"
.PD
This switch enables or disables the generation of \s-1ISEL\s0 instructions.
! .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 will allocate at least one \s-1TOC\s0 entry for
each unique non-automatic variable reference in your program. \s-1GCC\s0
will also place floating-point constants in the \s-1TOC\s0. However, only
*************** will also place floating-point constants
*** 6284,6318 ****
.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 will produce 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\s0 \s-1ABI\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 and
\&\fB\-mpowerpc\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-call\fR" 4
.IX Item "-mxl-call"
.PD 0
! .Ip "\fB\-mno-xl-call\fR" 4
.IX Item "-mno-xl-call"
.PD
On \s-1AIX\s0, pass floating-point arguments to prototyped functions beyond the
--- 6307,6341 ----
.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 will produce 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\s0 \s-1ABI\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 and
\&\fB\-mpowerpc\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\-call\fR" 4
.IX Item "-mxl-call"
.PD 0
! .IP "\fB\-mno\-xl\-call\fR" 4
.IX Item "-mno-xl-call"
.PD
On \s-1AIX\s0, pass floating-point arguments to prototyped functions beyond the
*************** optimization. Because always storing fl
*** 6326,6332 ****
stack is inefficient and rarely needed, this option is not enabled by
default and only is necessary when calling subroutines compiled by \s-1AIX\s0
\&\s-1XL\s0 compilers without optimization.
! .Ip "\fB\-mpe\fR" 4
.IX Item "-mpe"
Support \fI\s-1IBM\s0 \s-1RS/6000\s0 \s-1SP\s0\fR \fIParallel Environment\fR (\s-1PE\s0). Link an
application written to use message passing with special startup code to
--- 6349,6355 ----
stack is inefficient and rarely needed, this option is not enabled by
default and only is necessary when calling subroutines compiled by \s-1AIX\s0
\&\s-1XL\s0 compilers without optimization.
! .IP "\fB\-mpe\fR" 4
.IX Item "-mpe"
Support \fI\s-1IBM\s0 \s-1RS/6000\s0 \s-1SP\s0\fR \fIParallel Environment\fR (\s-1PE\s0). Link an
application written to use message passing with special startup code to
*************** must be overridden with the \fB\-specs=\
*** 6336,6354 ****
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\-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
--- 6359,6377 ----
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\-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
*************** generated on PowerPC systems. Do not us
*** 6358,6367 ****
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 the instructions usage in little endian mode.
! .Ip "\fB\-mstring\fR" 4
.IX Item "-mstring"
.PD 0
! .Ip "\fB\-mno-string\fR" 4
.IX Item "-mno-string"
.PD
Generate code that uses (does not use) the load string instructions
--- 6381,6390 ----
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 the instructions usage in little endian mode.
! .IP "\fB\-mstring\fR" 4
.IX Item "-mstring"
.PD 0
! .IP "\fB\-mno\-string\fR" 4
.IX Item "-mno-string"
.PD
Generate code that uses (does not use) the load string instructions
*************** do small block moves. These instruction
*** 6372,6522 ****
instructions do not work when the processor is in little endian mode.
The exceptions are \s-1PPC740\s0 and \s-1PPC750\s0 which permit the instructions
usage 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
that update the base register to the address of the calculated memory
location. These instructions are generated by default. If you use
! \&\fB\-mno-update\fR, 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.
! .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 is used.
! .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 would be aligned to a 4 byte
! boundary and have a size of 4 bytes. By using \fB\-mno-bit-align\fR,
the structure would be aligned to a 1 byte boundary and be one 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 will be 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
On embedded PowerPC systems generate code that allows (does not allow)
the program to be relocated to a different address at runtime. If you
use \fB\-mrelocatable\fR on any module, all objects linked together must
! be compiled with \fB\-mrelocatable\fR or \fB\-mrelocatable-lib\fR.
! .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
On embedded PowerPC systems generate code that allows (does not allow)
the program to be relocated to a different address at runtime. Modules
! compiled with \fB\-mrelocatable-lib\fR can be linked with either modules
! compiled without \fB\-mrelocatable\fR and \fB\-mrelocatable-lib\fR or
with modules compiled with 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\-mcall-sysv\fR" 4
.IX Item "-mcall-sysv"
On System V.4 and embedded PowerPC systems compile code using calling
conventions that adheres 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"
! 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-aix\fR" 4
.IX Item "-mcall-aix"
On System V.4 and embedded PowerPC systems compile code using calling
conventions that are similar to those used on \s-1AIX\s0. This is the
! default if you configured \s-1GCC\s0 using \fBpowerpc-*\-eabiaix\fR.
! .Ip "\fB\-mcall-solaris\fR" 4
.IX Item "-mcall-solaris"
On System V.4 and embedded PowerPC systems compile code for the Solaris
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-gnu\fR" 4
.IX Item "-mcall-gnu"
On System V.4 and embedded PowerPC systems compile code for the
Hurd-based \s-1GNU\s0 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\-maix-struct-return\fR" 4
.IX Item "-maix-struct-return"
Return all structures in memory (as specified by the \s-1AIX\s0 \s-1ABI\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\s0 \s-1ABI\s0).
! .Ip "\fB\-mabi=altivec\fR" 4
.IX Item "-mabi=altivec"
Extend the current \s-1ABI\s0 with AltiVec \s-1ABI\s0 extensions. This does not
change the default \s-1ABI\s0, instead it adds the AltiVec \s-1ABI\s0 extensions to
the current \s-1ABI\s0.
! .Ip "\fB\-mabi=no-altivec\fR" 4
.IX Item "-mabi=no-altivec"
Disable AltiVec \s-1ABI\s0 extensions for the current \s-1ABI\s0.
! .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
--- 6395,6545 ----
instructions do not work when the processor is in little endian mode.
The exceptions are \s-1PPC740\s0 and \s-1PPC750\s0 which permit the instructions
usage 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
that update the base register to the address of the calculated memory
location. These instructions are generated by default. If you use
! \&\fB\-mno\-update\fR, 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.
! .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 is used.
! .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 would be aligned to a 4 byte
! boundary and have a size of 4 bytes. By using \fB\-mno\-bit\-align\fR,
the structure would be aligned to a 1 byte boundary and be one 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 will be 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
On embedded PowerPC systems generate code that allows (does not allow)
the program to be relocated to a different address at runtime. If you
use \fB\-mrelocatable\fR on any module, all objects linked together must
! be compiled with \fB\-mrelocatable\fR or \fB\-mrelocatable\-lib\fR.
! .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
On embedded PowerPC systems generate code that allows (does not allow)
the program to be relocated to a different address at runtime. Modules
! compiled with \fB\-mrelocatable\-lib\fR can be linked with either modules
! compiled without \fB\-mrelocatable\fR and \fB\-mrelocatable\-lib\fR or
with modules compiled with 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\-mcall\-sysv\fR" 4
.IX Item "-mcall-sysv"
On System V.4 and embedded PowerPC systems compile code using calling
conventions that adheres 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"
! 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\-aix\fR" 4
.IX Item "-mcall-aix"
On System V.4 and embedded PowerPC systems compile code using calling
conventions that are similar to those used on \s-1AIX\s0. This is the
! default if you configured \s-1GCC\s0 using \fBpowerpc\-*\-eabiaix\fR.
! .IP "\fB\-mcall\-solaris\fR" 4
.IX Item "-mcall-solaris"
On System V.4 and embedded PowerPC systems compile code for the Solaris
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\-gnu\fR" 4
.IX Item "-mcall-gnu"
On System V.4 and embedded PowerPC systems compile code for the
Hurd-based \s-1GNU\s0 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\-maix\-struct\-return\fR" 4
.IX Item "-maix-struct-return"
Return all structures in memory (as specified by the \s-1AIX\s0 \s-1ABI\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\s0 \s-1ABI\s0).
! .IP "\fB\-mabi=altivec\fR" 4
.IX Item "-mabi=altivec"
Extend the current \s-1ABI\s0 with AltiVec \s-1ABI\s0 extensions. This does not
change the default \s-1ABI\s0, instead it adds the AltiVec \s-1ABI\s0 extensions to
the current \s-1ABI\s0.
! .IP "\fB\-mabi=no\-altivec\fR" 4
.IX Item "-mabi=no-altivec"
Disable AltiVec \s-1ABI\s0 extensions for the current \s-1ABI\s0.
! .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
*************** indicate whether floating point values w
*** 6527,6568 ****
registers in case the function takes a variable arguments. With
\&\fB\-mprototype\fR, only calls to prototyped variable argument functions
will 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\-mwindiss\fR" 4
.IX Item "-mwindiss"
Specify that you are compiling for the WindISS simulation environment.
! .Ip "\fB\-memb\fR" 4
.IX Item "-memb"
On embedded PowerPC systems, set the \fI\s-1PPC_EMB\s0\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
--- 6550,6591 ----
registers in case the function takes a variable arguments. With
\&\fB\-mprototype\fR, only calls to prototyped variable argument functions
will 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\-mwindiss\fR" 4
.IX Item "-mwindiss"
Specify that you are compiling for the WindISS simulation environment.
! .IP "\fB\-memb\fR" 4
.IX Item "-memb"
On embedded PowerPC systems, set the \fI\s-1PPC_EMB\s0\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
*************** means that the stack is aligned to an 8
*** 6572,6594 ****
\&\f(CW\*(C`_\|_eabi\*(C'\fR is called to 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,
do not call an initialization function from \f(CW\*(C`main\*(C'\fR, and the
\&\fB\-msdata\fR option will only use \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 \fB.sdata2\fR section, which
is pointed to by register \f(CW\*(C`r2\*(C'\fR. Put small initialized
! non-\f(CW\*(C`const\*(C'\fR global and static data in the \fB.sdata\fR section,
which is pointed to by register \f(CW\*(C`r13\*(C'\fR. Put small uninitialized
global and static data in the \fB.sbss\fR section, which is adjacent to
the \fB.sdata\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 \fB.sdata\fR section, which is pointed to by register
--- 6595,6617 ----
\&\f(CW\*(C`_\|_eabi\*(C'\fR is called to 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,
do not call an initialization function from \f(CW\*(C`main\*(C'\fR, and the
\&\fB\-msdata\fR option will only use \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 \fB.sdata2\fR section, which
is pointed to by register \f(CW\*(C`r2\*(C'\fR. Put small initialized
! non\-\f(CW\*(C`const\*(C'\fR global and static data in the \fB.sdata\fR section,
which is pointed to by register \f(CW\*(C`r13\*(C'\fR. Put small uninitialized
global and static data in the \fB.sbss\fR section, which is adjacent to
the \fB.sdata\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 \fB.sdata\fR section, which is pointed to by register
*************** data in the \fB.sdata\fR section, which
*** 6596,6645 ****
\&\fB.sbss\fR section, which is adjacent to the \fB.sdata\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 and static
data in the \fB.sdata\fR section. Put small uninitialized global and
static data in the \fB.sbss\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 \fB.data\fR section, and all uninitialized data in the
\&\fB.bss\fR section.
! .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
Default to making all function calls via pointers, so that functions
--- 6619,6668 ----
\&\fB.sbss\fR section, which is adjacent to the \fB.sdata\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 and static
data in the \fB.sdata\fR section. Put small uninitialized global and
static data in the \fB.sbss\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 \fB.data\fR section, and all uninitialized data in the
\&\fB.bss\fR section.
! .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
Default to making all function calls via pointers, so that functions
*************** to the \s-1GNU\s0 linker for 32\-bit Pow
*** 6655,6853 ****
.Sp
In the future, we may cause \s-1GCC\s0 to ignore all longcall specifications
when the linker is known to generate glue.
! .Ip "\fB\-pthread\fR" 4
.IX Item "-pthread"
Adds support for multithreading with the \fIpthreads\fR library.
This option sets flags for both the preprocessor and linker.
.PP
! .I "Darwin Options"
.IX Subsection "Darwin Options"
.PP
These options are defined for all architectures running the Darwin operating
system. They are useful for compatibility with other Mac \s-1OS\s0 compilers.
! .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 specifies the \fIexecutable\fR that will be loading the build
output file being linked. See man \fIld\fR\|(1) for more information.
! .Ip "\fB\-allowable_client\fR \fIclient_name\fR" 4
.IX Item "-allowable_client client_name"
.PD 0
! .Ip "\fB\-arch_only\fR" 4
.IX Item "-arch_only"
! .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\-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\-dynamiclib\fR" 4
.IX Item "-dynamiclib"
! .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_cpusubtype_ALL\fR" 4
.IX Item "-force_cpusubtype_ALL"
! .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\-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\-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
This options are available for Darwin linker. Darwin linker man page
describes them in detail.
.PP
! .I "\s-1IBM\s0 \s-1RT\s0 Options"
.IX Subsection "IBM RT Options"
.PP
These \fB\-m\fR options are defined for the \s-1IBM\s0 \s-1RT\s0 \s-1PC:\s0
! .Ip "\fB\-min-line-mul\fR" 4
.IX Item "-min-line-mul"
Use an in-line code sequence for integer multiplies. This is the
default.
! .Ip "\fB\-mcall-lib-mul\fR" 4
.IX Item "-mcall-lib-mul"
Call \f(CW\*(C`lmul$$\*(C'\fR for integer multiples.
! .Ip "\fB\-mfull-fp-blocks\fR" 4
.IX Item "-mfull-fp-blocks"
Generate full-size floating point data blocks, including the minimum
amount of scratch space recommended by \s-1IBM\s0. This is the default.
! .Ip "\fB\-mminimum-fp-blocks\fR" 4
.IX Item "-mminimum-fp-blocks"
Do not include extra scratch space in floating point data blocks. This
results in smaller code, but slower execution, since scratch space must
be allocated dynamically.
! .Ip "\fB\-mfp-arg-in-fpregs\fR" 4
.IX Item "-mfp-arg-in-fpregs"
Use a calling sequence incompatible with the \s-1IBM\s0 calling convention in
which floating point arguments are passed in floating point registers.
Note that \f(CW\*(C`stdarg.h\*(C'\fR will not work with floating point operands
if this option is specified.
! .Ip "\fB\-mfp-arg-in-gregs\fR" 4
.IX Item "-mfp-arg-in-gregs"
Use the normal calling convention for floating point arguments. This is
the default.
! .Ip "\fB\-mhc-struct-return\fR" 4
.IX Item "-mhc-struct-return"
Return structures of more than one word in memory, rather than in a
register. This provides compatibility with the MetaWare HighC (hc)
! compiler. Use the option \fB\-fpcc-struct-return\fR for compatibility
with the Portable C Compiler (pcc).
! .Ip "\fB\-mnohc-struct-return\fR" 4
.IX Item "-mnohc-struct-return"
Return some structures of more than one word in registers, when
convenient. This is the default. For compatibility with the
! IBM-supplied compilers, use the option \fB\-fpcc-struct-return\fR or the
! option \fB\-mhc-struct-return\fR.
.PP
! .I "\s-1MIPS\s0 Options"
.IX Subsection "MIPS Options"
.PP
These \fB\-m\fR options are defined for the \s-1MIPS\s0 family of computers:
! .Ip "\fB\-march=\fR\fIarch\fR" 4
.IX Item "-march=arch"
Generate code that will run on \fIarch\fR, which can be the name of a
generic \s-1MIPS\s0 \s-1ISA\s0, or the name of a particular processor. The \s-1ISA\s0 names
--- 6678,6876 ----
.Sp
In the future, we may cause \s-1GCC\s0 to ignore all longcall specifications
when the linker is known to generate glue.
! .IP "\fB\-pthread\fR" 4
.IX Item "-pthread"
Adds support for multithreading with the \fIpthreads\fR library.
This option sets flags for both the preprocessor and linker.
.PP
! \fIDarwin Options\fR
.IX Subsection "Darwin Options"
.PP
These options are defined for all architectures running the Darwin operating
system. They are useful for compatibility with other Mac \s-1OS\s0 compilers.
! .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 specifies the \fIexecutable\fR that will be loading the build
output file being linked. See man \fIld\fR\|(1) for more information.
! .IP "\fB\-allowable_client\fR \fIclient_name\fR" 4
.IX Item "-allowable_client client_name"
.PD 0
! .IP "\fB\-arch_only\fR" 4
.IX Item "-arch_only"
! .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\-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\-dynamiclib\fR" 4
.IX Item "-dynamiclib"
! .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_cpusubtype_ALL\fR" 4
.IX Item "-force_cpusubtype_ALL"
! .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\-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\-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
This options are available for Darwin linker. Darwin linker man page
describes them in detail.
.PP
! \fI\s-1IBM\s0 \s-1RT\s0 Options\fR
.IX Subsection "IBM RT Options"
.PP
These \fB\-m\fR options are defined for the \s-1IBM\s0 \s-1RT\s0 \s-1PC:\s0
! .IP "\fB\-min\-line\-mul\fR" 4
.IX Item "-min-line-mul"
Use an in-line code sequence for integer multiplies. This is the
default.
! .IP "\fB\-mcall\-lib\-mul\fR" 4
.IX Item "-mcall-lib-mul"
Call \f(CW\*(C`lmul$$\*(C'\fR for integer multiples.
! .IP "\fB\-mfull\-fp\-blocks\fR" 4
.IX Item "-mfull-fp-blocks"
Generate full-size floating point data blocks, including the minimum
amount of scratch space recommended by \s-1IBM\s0. This is the default.
! .IP "\fB\-mminimum\-fp\-blocks\fR" 4
.IX Item "-mminimum-fp-blocks"
Do not include extra scratch space in floating point data blocks. This
results in smaller code, but slower execution, since scratch space must
be allocated dynamically.
! .IP "\fB\-mfp\-arg\-in\-fpregs\fR" 4
.IX Item "-mfp-arg-in-fpregs"
Use a calling sequence incompatible with the \s-1IBM\s0 calling convention in
which floating point arguments are passed in floating point registers.
Note that \f(CW\*(C`stdarg.h\*(C'\fR will not work with floating point operands
if this option is specified.
! .IP "\fB\-mfp\-arg\-in\-gregs\fR" 4
.IX Item "-mfp-arg-in-gregs"
Use the normal calling convention for floating point arguments. This is
the default.
! .IP "\fB\-mhc\-struct\-return\fR" 4
.IX Item "-mhc-struct-return"
Return structures of more than one word in memory, rather than in a
register. This provides compatibility with the MetaWare HighC (hc)
! compiler. Use the option \fB\-fpcc\-struct\-return\fR for compatibility
with the Portable C Compiler (pcc).
! .IP "\fB\-mnohc\-struct\-return\fR" 4
.IX Item "-mnohc-struct-return"
Return some structures of more than one word in registers, when
convenient. This is the default. For compatibility with the
! IBM-supplied compilers, use the option \fB\-fpcc\-struct\-return\fR or the
! option \fB\-mhc\-struct\-return\fR.
.PP
! \fI\s-1MIPS\s0 Options\fR
.IX Subsection "MIPS Options"
.PP
These \fB\-m\fR options are defined for the \s-1MIPS\s0 family of computers:
! .IP "\fB\-march=\fR\fIarch\fR" 4
.IX Item "-march=arch"
Generate code that will run on \fIarch\fR, which can be the name of a
generic \s-1MIPS\s0 \s-1ISA\s0, or the name of a particular processor. The \s-1ISA\s0 names
*************** abbreviate \fB000\fR as \fBk\fR. In the
*** 6877,6883 ****
the macro names the resolved architecture (either \fB\*(L"mips1\*(R"\fR or
\&\fB\*(L"mips3\*(R"\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
--- 6900,6906 ----
the macro names the resolved architecture (either \fB\*(L"mips1\*(R"\fR or
\&\fB\*(L"mips3\*(R"\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
*************** particular member of that family.
*** 6893,6920 ****
\&\fB\-mtune\fR defines the macros \fB_MIPS_TUNE\fR and
\&\fB_MIPS_TUNE_\fR\fIfoo\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\-mips64\fR" 4
.IX Item "-mips64"
Equivalent to \fB\-march=mips64\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
--- 6916,6943 ----
\&\fB\-mtune\fR defines the macros \fB_MIPS_TUNE\fR and
\&\fB_MIPS_TUNE_\fR\fIfoo\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\-mips64\fR" 4
.IX Item "-mips64"
Equivalent to \fB\-march=mips64\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
*************** undesirable if the extra precision cause
*** 6924,6950 ****
in the mode where denormals are rounded to zero where denormals
generated by multiply and accumulate instructions cause exceptions
anyway.
! .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\-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\-mint64\fR" 4
.IX Item "-mint64"
Force int and long types to be 64 bits wide. See \fB\-mlong32\fR for an
explanation of the default, and the width of pointers.
! .Ip "\fB\-mlong64\fR" 4
.IX Item "-mlong64"
Force long types to be 64 bits wide. See \fB\-mlong32\fR for an
explanation of the default, and the width of pointers.
! .Ip "\fB\-mlong32\fR" 4
.IX Item "-mlong32"
Force long, int, and pointer types to be 32 bits wide.
.Sp
--- 6947,6973 ----
in the mode where denormals are rounded to zero where denormals
generated by multiply and accumulate instructions cause exceptions
anyway.
! .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\-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\-mint64\fR" 4
.IX Item "-mint64"
Force int and long types to be 64 bits wide. See \fB\-mlong32\fR for an
explanation of the default, and the width of pointers.
! .IP "\fB\-mlong64\fR" 4
.IX Item "-mlong64"
Force long types to be 64 bits wide. See \fB\-mlong32\fR for an
explanation of the default, and the width of pointers.
! .IP "\fB\-mlong32\fR" 4
.IX Item "-mlong32"
Force long, int, and pointer types to be 32 bits wide.
.Sp
*************** the supported ABIs use 32\-bit ints. Th
*** 6953,6970 ****
does the 64\-bit Cygnus \s-1EABI\s0; the others use 32\-bit longs. Pointers
are the same size as longs, or the same size as integer registers,
whichever is smaller.
! .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"
! .Ip "\fB\-mabi=meabi\fR" 4
.IX Item "-mabi=meabi"
.PD
Generate code for the given \s-1ABI\s0.
--- 6976,6993 ----
does the 64\-bit Cygnus \s-1EABI\s0; the others use 32\-bit longs. Pointers
are the same size as longs, or the same size as integer registers,
whichever is smaller.
! .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"
! .IP "\fB\-mabi=meabi\fR" 4
.IX Item "-mabi=meabi"
.PD
Generate code for the given \s-1ABI\s0.
*************** selects the one defined by \s-1MIPS\s0.
*** 6975,6981 ****
32\-bit and 64\-bit variants. Normally, \s-1GCC\s0 will generate
64\-bit code when you select a 64\-bit architecture, but you
can use \fB\-mgp32\fR to get 32\-bit code instead.
! .Ip "\fB\-mmips-as\fR" 4
.IX Item "-mmips-as"
Generate code for the \s-1MIPS\s0 assembler, and invoke \fImips-tfile\fR to
add normal debug information. This is the default for all
--- 6998,7004 ----
32\-bit and 64\-bit variants. Normally, \s-1GCC\s0 will generate
64\-bit code when you select a 64\-bit architecture, but you
can use \fB\-mgp32\fR to get 32\-bit code instead.
! .IP "\fB\-mmips\-as\fR" 4
.IX Item "-mmips-as"
Generate code for the \s-1MIPS\s0 assembler, and invoke \fImips-tfile\fR to
add normal debug information. This is the default for all
*************** platforms except for the \s-1OSF/1\s0 re
*** 6983,6997 ****
object format. If the either of the \fB\-gstabs\fR or \fB\-gstabs+\fR
switches are used, the \fImips-tfile\fR program will encapsulate the
stabs within \s-1MIPS\s0 \s-1ECOFF\s0.
! .Ip "\fB\-mgas\fR" 4
.IX Item "-mgas"
Generate code for the \s-1GNU\s0 assembler. This is the default on the \s-1OSF/1\s0
reference platform, using the OSF/rose object format. Also, this is
! the default if the configure option \fB\*(--with-gnu-as\fR is used.
! .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
Generate code to load the high and low parts of address constants separately.
--- 7006,7020 ----
object format. If the either of the \fB\-gstabs\fR or \fB\-gstabs+\fR
switches are used, the \fImips-tfile\fR program will encapsulate the
stabs within \s-1MIPS\s0 \s-1ECOFF\s0.
! .IP "\fB\-mgas\fR" 4
.IX Item "-mgas"
Generate code for the \s-1GNU\s0 assembler. This is the default on the \s-1OSF/1\s0
reference platform, using the OSF/rose object format. Also, this is
! the default if the configure option \fB\-\-with\-gnu\-as\fR is used.
! .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
Generate code to load the high and low parts of address constants separately.
*************** This allows \s-1GCC\s0 to optimize away
*** 6999,7018 ****
bits of addresses. This optimization requires \s-1GNU\s0 as and \s-1GNU\s0 ld.
This optimization is enabled by default for some embedded targets where
\&\s-1GNU\s0 as and \s-1GNU\s0 ld are standard.
! .Ip "\fB\-mrnames\fR" 4
.IX Item "-mrnames"
.PD 0
! .Ip "\fB\-mno-rnames\fR" 4
.IX Item "-mno-rnames"
.PD
The \fB\-mrnames\fR switch says to output code using the \s-1MIPS\s0 software
names for the registers, instead of the hardware names (ie, \fIa0\fR
instead of \fI$4\fR). The only known assembler that supports this option
is the Algorithmics assembler.
! .Ip "\fB\-mgpopt\fR" 4
.IX Item "-mgpopt"
.PD 0
! .Ip "\fB\-mno-gpopt\fR" 4
.IX Item "-mno-gpopt"
.PD
The \fB\-mgpopt\fR switch says to write all of the data declarations
--- 7022,7041 ----
bits of addresses. This optimization requires \s-1GNU\s0 as and \s-1GNU\s0 ld.
This optimization is enabled by default for some embedded targets where
\&\s-1GNU\s0 as and \s-1GNU\s0 ld are standard.
! .IP "\fB\-mrnames\fR" 4
.IX Item "-mrnames"
.PD 0
! .IP "\fB\-mno\-rnames\fR" 4
.IX Item "-mno-rnames"
.PD
The \fB\-mrnames\fR switch says to output code using the \s-1MIPS\s0 software
names for the registers, instead of the hardware names (ie, \fIa0\fR
instead of \fI$4\fR). The only known assembler that supports this option
is the Algorithmics assembler.
! .IP "\fB\-mgpopt\fR" 4
.IX Item "-mgpopt"
.PD 0
! .IP "\fB\-mno\-gpopt\fR" 4
.IX Item "-mno-gpopt"
.PD
The \fB\-mgpopt\fR switch says to write all of the data declarations
*************** before the instructions in the text sect
*** 7020,7103 ****
assembler to generate one word memory references instead of using two
words for short global or static data items. This is on by default if
optimization is selected.
! .Ip "\fB\-mstats\fR" 4
.IX Item "-mstats"
.PD 0
! .Ip "\fB\-mno-stats\fR" 4
.IX Item "-mno-stats"
.PD
For each non-inline function processed, the \fB\-mstats\fR switch
causes the compiler to emit one line to the standard error file to
print statistics about the program (number of registers saved, stack
size, etc.).
! .Ip "\fB\-mmemcpy\fR" 4
.IX Item "-mmemcpy"
.PD 0
! .Ip "\fB\-mno-memcpy\fR" 4
.IX Item "-mno-memcpy"
.PD
The \fB\-mmemcpy\fR switch makes all block moves call the appropriate
string function (\fBmemcpy\fR or \fBbcopy\fR) instead of possibly
generating inline code.
! .Ip "\fB\-mmips-tfile\fR" 4
.IX Item "-mmips-tfile"
.PD 0
! .Ip "\fB\-mno-mips-tfile\fR" 4
.IX Item "-mno-mips-tfile"
.PD
! The \fB\-mno-mips-tfile\fR switch causes the compiler not
postprocess the object file with the \fImips-tfile\fR program,
after the \s-1MIPS\s0 assembler has generated it to add debug support. If
\&\fImips-tfile\fR is not run, then no local variables will be
available to the debugger. In addition, \fIstage2\fR and
\&\fIstage3\fR objects will have the temporary file names passed to the
assembler embedded in the object file, which means the objects will
! not compare the same. The \fB\-mno-mips-tfile\fR switch should only
be used when there are bugs in the \fImips-tfile\fR program that
prevents compilation.
! .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 part of \s-1GCC\s0.
Normally the facilities of the machine's usual C compiler are used, but
! this can't be done directly in cross-compilation. You must make your
own arrangements to provide suitable library functions for
! cross-compilation.
! .Ip "\fB\-mhard-float\fR" 4
.IX Item "-mhard-float"
Generate output containing floating point instructions. This is the
default if you use the unmodified sources.
! .Ip "\fB\-mabicalls\fR" 4
.IX Item "-mabicalls"
.PD 0
! .Ip "\fB\-mno-abicalls\fR" 4
.IX Item "-mno-abicalls"
.PD
Emit (or do not emit) the pseudo operations \fB.abicalls\fR,
\&\fB.cpload\fR, and \fB.cprestore\fR that some System V.4 ports use for
position independent code.
! .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
Do all calls with the \fB\s-1JALR\s0\fR instruction, which requires
loading up a function's address into a register before the call.
You need to use this switch, if you call outside of the current
512 megabyte segment to functions that are not through pointers.
! .Ip "\fB\-mhalf-pic\fR" 4
.IX Item "-mhalf-pic"
.PD 0
! .Ip "\fB\-mno-half-pic\fR" 4
.IX Item "-mno-half-pic"
.PD
Put pointers to extern references into the data section and load them
up, rather than put the references in the text section.
! .Ip "\fB\-membedded-pic\fR" 4
.IX Item "-membedded-pic"
.PD 0
! .Ip "\fB\-mno-embedded-pic\fR" 4
.IX Item "-mno-embedded-pic"
.PD
Generate \s-1PIC\s0 code suitable for some embedded systems. All calls are
--- 7043,7126 ----
assembler to generate one word memory references instead of using two
words for short global or static data items. This is on by default if
optimization is selected.
! .IP "\fB\-mstats\fR" 4
.IX Item "-mstats"
.PD 0
! .IP "\fB\-mno\-stats\fR" 4
.IX Item "-mno-stats"
.PD
For each non-inline function processed, the \fB\-mstats\fR switch
causes the compiler to emit one line to the standard error file to
print statistics about the program (number of registers saved, stack
size, etc.).
! .IP "\fB\-mmemcpy\fR" 4
.IX Item "-mmemcpy"
.PD 0
! .IP "\fB\-mno\-memcpy\fR" 4
.IX Item "-mno-memcpy"
.PD
The \fB\-mmemcpy\fR switch makes all block moves call the appropriate
string function (\fBmemcpy\fR or \fBbcopy\fR) instead of possibly
generating inline code.
! .IP "\fB\-mmips\-tfile\fR" 4
.IX Item "-mmips-tfile"
.PD 0
! .IP "\fB\-mno\-mips\-tfile\fR" 4
.IX Item "-mno-mips-tfile"
.PD
! The \fB\-mno\-mips\-tfile\fR switch causes the compiler not
postprocess the object file with the \fImips-tfile\fR program,
after the \s-1MIPS\s0 assembler has generated it to add debug support. If
\&\fImips-tfile\fR is not run, then no local variables will be
available to the debugger. In addition, \fIstage2\fR and
\&\fIstage3\fR objects will have the temporary file names passed to the
assembler embedded in the object file, which means the objects will
! not compare the same. The \fB\-mno\-mips\-tfile\fR switch should only
be used when there are bugs in the \fImips-tfile\fR program that
prevents compilation.
! .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 part of \s-1GCC\s0.
Normally the facilities of the machine's usual C compiler are used, but
! this can't be done directly in cross\-compilation. You must make your
own arrangements to provide suitable library functions for
! cross\-compilation.
! .IP "\fB\-mhard\-float\fR" 4
.IX Item "-mhard-float"
Generate output containing floating point instructions. This is the
default if you use the unmodified sources.
! .IP "\fB\-mabicalls\fR" 4
.IX Item "-mabicalls"
.PD 0
! .IP "\fB\-mno\-abicalls\fR" 4
.IX Item "-mno-abicalls"
.PD
Emit (or do not emit) the pseudo operations \fB.abicalls\fR,
\&\fB.cpload\fR, and \fB.cprestore\fR that some System V.4 ports use for
position independent code.
! .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
Do all calls with the \fB\s-1JALR\s0\fR instruction, which requires
loading up a function's address into a register before the call.
You need to use this switch, if you call outside of the current
512 megabyte segment to functions that are not through pointers.
! .IP "\fB\-mhalf\-pic\fR" 4
.IX Item "-mhalf-pic"
.PD 0
! .IP "\fB\-mno\-half\-pic\fR" 4
.IX Item "-mno-half-pic"
.PD
Put pointers to extern references into the data section and load them
up, rather than put the references in the text section.
! .IP "\fB\-membedded\-pic\fR" 4
.IX Item "-membedded-pic"
.PD 0
! .IP "\fB\-mno\-embedded\-pic\fR" 4
.IX Item "-mno-embedded-pic"
.PD
Generate \s-1PIC\s0 code suitable for some embedded systems. All calls are
*************** made using \s-1PC\s0 relative address, a
*** 7105,7170 ****
register. No more than 65536 bytes of global data may be used. This
requires \s-1GNU\s0 as and \s-1GNU\s0 ld which do most of the work. This currently
only works on targets which use \s-1ECOFF\s0; it does not work with \s-1ELF\s0.
! .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
! When used together with \fB\-membedded-data\fR, it will always store uninitialized
const variables in the read-only data section.
! .Ip "\fB\-msingle-float\fR" 4
.IX Item "-msingle-float"
.PD 0
! .Ip "\fB\-mdouble-float\fR" 4
.IX Item "-mdouble-float"
.PD
! The \fB\-msingle-float\fR switch tells gcc to assume that the floating
point coprocessor only supports single precision operations, as on the
! \&\fBr4650\fR chip. The \fB\-mdouble-float\fR switch permits gcc to use
double precision operations. This is the default.
! .Ip "\fB\-mmad\fR" 4
.IX Item "-mmad"
.PD 0
! .Ip "\fB\-mno-mad\fR" 4
.IX Item "-mno-mad"
.PD
Permit use of the \fBmad\fR, \fBmadu\fR and \fBmul\fR instructions,
as on the \fBr4650\fR chip.
! .Ip "\fB\-m4650\fR" 4
.IX Item "-m4650"
! Turns on \fB\-msingle-float\fR, \fB\-mmad\fR, and, at least for now,
\&\fB\-mcpu=r4650\fR.
! .Ip "\fB\-mips16\fR" 4
.IX Item "-mips16"
.PD 0
! .Ip "\fB\-mno-mips16\fR" 4
.IX Item "-mno-mips16"
.PD
Enable 16\-bit instructions.
! .Ip "\fB\-mentry\fR" 4
.IX Item "-mentry"
Use the entry and exit pseudo ops. This option can only be used with
\&\fB\-mips16\fR.
! .Ip "\fB\-EL\fR" 4
.IX Item "-EL"
Compile code for the processor in little endian mode.
The requisite libraries are assumed to exist.
! .Ip "\fB\-EB\fR" 4
.IX Item "-EB"
Compile code for the processor in big endian mode.
The requisite libraries are assumed to exist.
! .Ip "\fB\-G\fR \fInum\fR" 4
.IX Item "-G num"
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
--- 7128,7193 ----
register. No more than 65536 bytes of global data may be used. This
requires \s-1GNU\s0 as and \s-1GNU\s0 ld which do most of the work. This currently
only works on targets which use \s-1ECOFF\s0; it does not work with \s-1ELF\s0.
! .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
! When used together with \fB\-membedded\-data\fR, it will always store uninitialized
const variables in the read-only data section.
! .IP "\fB\-msingle\-float\fR" 4
.IX Item "-msingle-float"
.PD 0
! .IP "\fB\-mdouble\-float\fR" 4
.IX Item "-mdouble-float"
.PD
! The \fB\-msingle\-float\fR switch tells gcc to assume that the floating
point coprocessor only supports single precision operations, as on the
! \&\fBr4650\fR chip. The \fB\-mdouble\-float\fR switch permits gcc to use
double precision operations. This is the default.
! .IP "\fB\-mmad\fR" 4
.IX Item "-mmad"
.PD 0
! .IP "\fB\-mno\-mad\fR" 4
.IX Item "-mno-mad"
.PD
Permit use of the \fBmad\fR, \fBmadu\fR and \fBmul\fR instructions,
as on the \fBr4650\fR chip.
! .IP "\fB\-m4650\fR" 4
.IX Item "-m4650"
! Turns on \fB\-msingle\-float\fR, \fB\-mmad\fR, and, at least for now,
\&\fB\-mcpu=r4650\fR.
! .IP "\fB\-mips16\fR" 4
.IX Item "-mips16"
.PD 0
! .IP "\fB\-mno\-mips16\fR" 4
.IX Item "-mno-mips16"
.PD
Enable 16\-bit instructions.
! .IP "\fB\-mentry\fR" 4
.IX Item "-mentry"
Use the entry and exit pseudo ops. This option can only be used with
\&\fB\-mips16\fR.
! .IP "\fB\-EL\fR" 4
.IX Item "-EL"
Compile code for the processor in little endian mode.
The requisite libraries are assumed to exist.
! .IP "\fB\-EB\fR" 4
.IX Item "-EB"
Compile code for the processor in big endian mode.
The requisite libraries are assumed to exist.
! .IP "\fB\-G\fR \fInum\fR" 4
.IX Item "-G num"
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
*************** the \s-1MIPS\s0 assembler is used, and 0
*** 7175,7196 ****
\&\fB\-G\fR \fInum\fR switch is also passed to the assembler and linker.
All modules should be compiled with the same \fB\-G\fR \fInum\fR
value.
! .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\-mfix7000\fR" 4
.IX Item "-mfix7000"
Pass an option to gas which will cause nops to be inserted if
the read of the destination register of an mfhi or mflo instruction
occurs in the following two instructions.
! .Ip "\fB\-no-crt0\fR" 4
.IX Item "-no-crt0"
Do not include the default crt0.
! .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
--- 7198,7219 ----
\&\fB\-G\fR \fInum\fR switch is also passed to the assembler and linker.
All modules should be compiled with the same \fB\-G\fR \fInum\fR
value.
! .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\-mfix7000\fR" 4
.IX Item "-mfix7000"
Pass an option to gas which will cause nops to be inserted if
the read of the destination register of an mfhi or mflo instruction
occurs in the following two instructions.
! .IP "\fB\-no\-crt0\fR" 4
.IX Item "-no-crt0"
Do not include the default crt0.
! .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
*************** memory range for which the cache is bein
*** 7200,7209 ****
memory range, and the number 3 (to flush both caches). The default
depends on the target gcc was configured for, but commonly is either
\&\fB_flush_func\fR or \fB_\|_cpu_flush\fR.
! .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
--- 7223,7232 ----
memory range, and the number 3 (to flush both caches). The default
depends on the target gcc was configured for, but commonly is either
\&\fB_flush_func\fR or \fB_\|_cpu_flush\fR.
! .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
*************** and processors which implement those arc
*** 7214,7225 ****
Likely instructions will not be generated by default because the \s-1MIPS32\s0
and \s-1MIPS64\s0 architectures specifically deprecate their use.
.PP
! .I "Intel 386 and \s-1AMD\s0 x86\-64 Options"
.IX Subsection "Intel 386 and AMD x86-64 Options"
.PP
These \fB\-m\fR options are defined for the i386 and x86\-64 family of
computers:
! .Ip "\fB\-mcpu=\fR\fIcpu-type\fR" 4
.IX Item "-mcpu=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 choices for
--- 7237,7248 ----
Likely instructions will not be generated by default because the \s-1MIPS32\s0
and \s-1MIPS64\s0 architectures specifically deprecate their use.
.PP
! \fIIntel 386 and \s-1AMD\s0 x86\-64 Options\fR
.IX Subsection "Intel 386 and AMD x86-64 Options"
.PP
These \fB\-m\fR options are defined for the i386 and x86\-64 family of
computers:
! .IP "\fB\-mcpu=\fR\fIcpu-type\fR" 4
.IX Item "-mcpu=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 choices for
*************** for the \s-1ABI\s0 and the set of availa
*** 7227,7234 ****
\&\fBpentium\fR, \fBpentium-mmx\fR, \fBpentiumpro\fR, \fBpentium2\fR,
\&\fBpentium3\fR, \fBpentium4\fR, \fBprescott\fR, \fBnocona\fR,
\&\fBk6\fR, \fBk6\-2\fR, \fBk6\-3\fR,
! \&\fBathlon\fR, \fBathlon-tbird\fR, \fBathlon-4\fR, \fBathlon-xp\fR,
! \&\fBathlon-mp\fR, \fBwinchip-c6\fR, \fBwinchip2\fR and \fBc3\fR.
.Sp
While picking a specific \fIcpu-type\fR will schedule things appropriately
for that particular chip, the compiler will not generate any code that
--- 7250,7257 ----
\&\fBpentium\fR, \fBpentium-mmx\fR, \fBpentiumpro\fR, \fBpentium2\fR,
\&\fBpentium3\fR, \fBpentium4\fR, \fBprescott\fR, \fBnocona\fR,
\&\fBk6\fR, \fBk6\-2\fR, \fBk6\-3\fR,
! \&\fBathlon\fR, \fBathlon-tbird\fR, \fBathlon\-4\fR, \fBathlon-xp\fR,
! \&\fBathlon-mp\fR, \fBwinchip\-c6\fR, \fBwinchip2\fR and \fBc3\fR.
.Sp
While picking a specific \fIcpu-type\fR will schedule things appropriately
for that particular chip, the compiler will not generate any code that
*************** does not run on the i386 without the \fB
*** 7236,7278 ****
being used. \fBi586\fR is equivalent to \fBpentium\fR and \fBi686\fR
is equivalent to \fBpentiumpro\fR. \fBk6\fR and \fBathlon\fR are the
\&\s-1AMD\s0 chips as opposed to the Intel ones.
! .Ip "\fB\-march=\fR\fIcpu-type\fR" 4
.IX Item "-march=cpu-type"
Generate instructions for the machine type \fIcpu-type\fR. The choices
for \fIcpu-type\fR are the same as for \fB\-mcpu\fR. Moreover,
specifying \fB\-march=\fR\fIcpu-type\fR implies \fB\-mcpu=\fR\fIcpu-type\fR.
! .Ip "\fB\-m386\fR" 4
.IX Item "-m386"
.PD 0
! .Ip "\fB\-m486\fR" 4
.IX Item "-m486"
! .Ip "\fB\-mpentium\fR" 4
.IX Item "-mpentium"
! .Ip "\fB\-mpentiumpro\fR" 4
.IX Item "-mpentiumpro"
.PD
These options are synonyms for \fB\-mcpu=i386\fR, \fB\-mcpu=i486\fR,
\&\fB\-mcpu=pentium\fR, and \fB\-mcpu=pentiumpro\fR respectively.
These synonyms are deprecated.
! .Ip "\fB\-mfpmath=\fR\fIunit\fR" 4
.IX Item "-mfpmath=unit"
Generate floating point arithmetics 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 majority of chips and
emulated otherwise. Code compiled with this option will run almost everywhere.
The temporary results are computed in 80bit precision instead of 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 i386 compiler.
! .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 Pentium3 and newer chips, in the \s-1AMD\s0 line
! by Athlon-4, Athlon-xp and Athlon-mp chips. The earlier version of \s-1SSE\s0
instruction set supports only single precision arithmetics, thus the double and
extended precision arithmetics is still done using 387. Later version, present
only in Pentium4 and the future \s-1AMD\s0 x86\-64 chips supports double precision
--- 7259,7301 ----
being used. \fBi586\fR is equivalent to \fBpentium\fR and \fBi686\fR
is equivalent to \fBpentiumpro\fR. \fBk6\fR and \fBathlon\fR are the
\&\s-1AMD\s0 chips as opposed to the Intel ones.
! .IP "\fB\-march=\fR\fIcpu-type\fR" 4
.IX Item "-march=cpu-type"
Generate instructions for the machine type \fIcpu-type\fR. The choices
for \fIcpu-type\fR are the same as for \fB\-mcpu\fR. Moreover,
specifying \fB\-march=\fR\fIcpu-type\fR implies \fB\-mcpu=\fR\fIcpu-type\fR.
! .IP "\fB\-m386\fR" 4
.IX Item "-m386"
.PD 0
! .IP "\fB\-m486\fR" 4
.IX Item "-m486"
! .IP "\fB\-mpentium\fR" 4
.IX Item "-mpentium"
! .IP "\fB\-mpentiumpro\fR" 4
.IX Item "-mpentiumpro"
.PD
These options are synonyms for \fB\-mcpu=i386\fR, \fB\-mcpu=i486\fR,
\&\fB\-mcpu=pentium\fR, and \fB\-mcpu=pentiumpro\fR respectively.
These synonyms are deprecated.
! .IP "\fB\-mfpmath=\fR\fIunit\fR" 4
.IX Item "-mfpmath=unit"
Generate floating point arithmetics 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 majority of chips and
emulated otherwise. Code compiled with this option will run almost everywhere.
The temporary results are computed in 80bit precision instead of 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 i386 compiler.
! .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 Pentium3 and newer chips, in the \s-1AMD\s0 line
! by Athlon\-4, Athlon-xp and Athlon-mp chips. The earlier version of \s-1SSE\s0
instruction set supports only single precision arithmetics, thus the double and
extended precision arithmetics is still done using 387. Later version, present
only in Pentium4 and the future \s-1AMD\s0 x86\-64 chips supports double precision
*************** the numerical instability problems of 38
*** 7287,7293 ****
code that expects temporaries to be 80bit.
.Sp
This is the default choice for the x86\-64 compiler.
! .Ip "\fBsse,387\fR" 4
.IX Item "sse,387"
Attempt to utilize both instruction sets at once. This effectively double the
amount of available registers and on chips with separate execution units for
--- 7310,7316 ----
code that expects temporaries to be 80bit.
.Sp
This is the default choice for the x86\-64 compiler.
! .IP "\fBsse,387\fR" 4
.IX Item "sse,387"
Attempt to utilize both instruction sets at once. This effectively double the
amount of available registers and on chips with separate execution units for
*************** functional units well.
*** 7297,7328 ****
.RE
.RS 4
.RE
! .Ip "\fB\-masm=\fR\fIdialect\fR" 4
.IX Item "-masm=dialect"
Output asm instructions using selected \fIdialect\fR. Supported choices are
\&\fBintel\fR or \fBatt\fR (the default one).
! .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 handle correctly the case where the result of a
comparison is unordered.
! .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 part of \s-1GCC\s0.
Normally the facilities of the machine's usual C compiler are used, but
! this can't 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
--- 7320,7351 ----
.RE
.RS 4
.RE
! .IP "\fB\-masm=\fR\fIdialect\fR" 4
.IX Item "-masm=dialect"
Output asm instructions using selected \fIdialect\fR. Supported choices are
\&\fBintel\fR or \fBatt\fR (the default one).
! .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 handle correctly the case where the result of a
comparison is unordered.
! .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 part of \s-1GCC\s0.
Normally the facilities of the machine's usual C compiler are used, but
! this can't 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 functio
*** 7331,7339 ****
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
--- 7354,7362 ----
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
*************** OpenBSD and NetBSD. This option is over
*** 7342,7352 ****
indicates that the target cpu will always have an \s-1FPU\s0 and so the
instruction will not need emulation. As of revision 2.6.1, 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
--- 7365,7375 ----
indicates that the target cpu will always have an \s-1FPU\s0 and so the
instruction will not need emulation. As of revision 2.6.1, 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
*************** boundary. Aligning \f(CW\*(C`double\*(C
*** 7355,7383 ****
produce code that runs somewhat faster on a \fBPentium\fR at the
expense of more memory.
.Sp
! \&\fBWarning:\fR if you use the \fB\-malign-double\fR switch,
structures containing the above types will be aligned differently than
the published application binary interface specifications for the 386
and will not be 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 i386
application binary interface specifies the size to be 96 bits,
! so \fB\-m96bit-long-double\fR is the default in 32 bit mode.
.Sp
Modern architectures (Pentium and newer) would 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 would not be possible. So specifying a
! \&\fB\-m128bit-long-double\fR will align \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 to be aligned on 16 byte boundary.
.Sp
Notice that neither of these options enable any extra precision over the x87
--- 7378,7406 ----
produce code that runs somewhat faster on a \fBPentium\fR at the
expense of more memory.
.Sp
! \&\fBWarning:\fR if you use the \fB\-malign\-double\fR switch,
structures containing the above types will be aligned differently than
the published application binary interface specifications for the 386
and will not be 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 i386
application binary interface specifies the size to be 96 bits,
! so \fB\-m96bit\-long\-double\fR is the default in 32 bit mode.
.Sp
Modern architectures (Pentium and newer) would 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 would not be possible. So specifying a
! \&\fB\-m128bit\-long\-double\fR will align \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 to be aligned on 16 byte boundary.
.Sp
Notice that neither of these options enable any extra precision over the x87
*************** structures and arrays containing \f(CW\*
*** 7388,7403 ****
well as function calling convention for function taking \f(CW\*(C`long double\*(C'\fR
will be modified. Hence they will not be binary compatible with arrays or
structures in code compiled without that switch.
! .Ip "\fB\-msvr3\-shlib\fR" 4
.IX Item "-msvr3-shlib"
.PD 0
! .Ip "\fB\-mno-svr3\-shlib\fR" 4
.IX Item "-mno-svr3-shlib"
.PD
Control whether \s-1GCC\s0 places uninitialized local variables into the
\&\f(CW\*(C`bss\*(C'\fR or \f(CW\*(C`data\*(C'\fR segments. \fB\-msvr3\-shlib\fR places them
into \f(CW\*(C`bss\*(C'\fR. These options are meaningful only on System V Release 3.
! .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\*(C'\fR \fInum\fR
--- 7411,7426 ----
well as function calling convention for function taking \f(CW\*(C`long double\*(C'\fR
will be modified. Hence they will not be binary compatible with arrays or
structures in code compiled without that switch.
! .IP "\fB\-msvr3\-shlib\fR" 4
.IX Item "-msvr3-shlib"
.PD 0
! .IP "\fB\-mno\-svr3\-shlib\fR" 4
.IX Item "-mno-svr3-shlib"
.PD
Control whether \s-1GCC\s0 places uninitialized local variables into the
\&\f(CW\*(C`bss\*(C'\fR or \f(CW\*(C`data\*(C'\fR segments. \fB\-msvr3\-shlib\fR places them
into \f(CW\*(C`bss\*(C'\fR. These options are meaningful only on System V Release 3.
! .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\*(C'\fR \fInum\fR
*************** functions.
*** 7422,7428 ****
In addition, seriously incorrect code will result 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
--- 7445,7451 ----
In addition, seriously incorrect code will result 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
*** 7433,7448 ****
\&\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\-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), except when optimizing for code
size (\fB\-Os\fR), in which case the default is the minimum correct
alignment (4 bytes for x86, and 8 bytes for x86\-64).
.Sp
On Pentium and PentiumPro, \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 suffers similar
penalties if it is not 16 byte aligned.
--- 7456,7471 ----
\&\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\-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), except when optimizing for code
size (\fB\-Os\fR), in which case the default is the minimum correct
alignment (4 bytes for x86, and 8 bytes for x86\-64).
.Sp
On Pentium and PentiumPro, \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 suffers similar
penalties if it is not 16 byte aligned.
*************** libraries that use callbacks always use
*** 7458,7484 ****
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 \fB\-mpreferred-stack-boundary=2\fR.
! .Ip "\fB\-mmmx\fR" 4
.IX Item "-mmmx"
.PD 0
! .Ip "\fB\-mno-mmx\fR" 4
.IX Item "-mno-mmx"
! .Ip "\fB\-msse\fR" 4
.IX Item "-msse"
! .Ip "\fB\-mno-sse\fR" 4
.IX Item "-mno-sse"
! .Ip "\fB\-msse2\fR" 4
.IX Item "-msse2"
! .Ip "\fB\-mno-sse2\fR" 4
.IX Item "-mno-sse2"
! .Ip "\fB\-msse3\fR" 4
.IX Item "-msse3"
! .Ip "\fB\-mno-sse3\fR" 4
.IX Item "-mno-sse3"
! .Ip "\fB\-m3dnow\fR" 4
.IX Item "-m3dnow"
! .Ip "\fB\-mno-3dnow\fR" 4
.IX Item "-mno-3dnow"
.PD
These switches enable or disable the use of built-in functions that allow
--- 7481,7507 ----
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 \fB\-mpreferred\-stack\-boundary=2\fR.
! .IP "\fB\-mmmx\fR" 4
.IX Item "-mmmx"
.PD 0
! .IP "\fB\-mno\-mmx\fR" 4
.IX Item "-mno-mmx"
! .IP "\fB\-msse\fR" 4
.IX Item "-msse"
! .IP "\fB\-mno\-sse\fR" 4
.IX Item "-mno-sse"
! .IP "\fB\-msse2\fR" 4
.IX Item "-msse2"
! .IP "\fB\-mno\-sse2\fR" 4
.IX Item "-mno-sse2"
! .IP "\fB\-msse3\fR" 4
.IX Item "-msse3"
! .IP "\fB\-mno\-sse3\fR" 4
.IX Item "-mno-sse3"
! .IP "\fB\-m3dnow\fR" 4
.IX Item "-m3dnow"
! .IP "\fB\-mno\-3dnow\fR" 4
.IX Item "-mno-3dnow"
.PD
These switches enable or disable the use of built-in functions that allow
*************** instruction set.
*** 7487,7541 ****
.Sp
To have \s-1SSE/SSE2\s0 instructions generated automatically from floating-point
code, see \fB\-mfpmath=sse\fR.
! .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 will be
computed in the function prologue. This is faster on most modern CPUs
because of reduced dependencies, improved scheduling and reduced stack usage
when 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 \fBMingw32\fR. Code that relies
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\-mno-align-stringops\fR" 4
.IX Item "-mno-align-stringops"
Do not align destination of inlined string operations. This switch reduces
code size and improves performance in case the destination is already aligned,
but gcc don'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 destination is known to be
aligned at least to 4 byte boundary. This enables more inlining, increase code
size, but may improve performance of code that depends on fast memcpy, strlen
and memset for short lengths.
! .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-frame-pointer\fR removes the frame pointer for all functions
which might make debugging harder.
.PP
These \fB\-m\fR switches are supported in addition to the above
on \s-1AMD\s0 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"
.PD
Generate code for a 32\-bit or 64\-bit environment.
--- 7510,7564 ----
.Sp
To have \s-1SSE/SSE2\s0 instructions generated automatically from floating-point
code, see \fB\-mfpmath=sse\fR.
! .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 will be
computed in the function prologue. This is faster on most modern CPUs
because of reduced dependencies, improved scheduling and reduced stack usage
when 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 \fBMingw32\fR. Code that relies
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\-mno\-align\-stringops\fR" 4
.IX Item "-mno-align-stringops"
Do not align destination of inlined string operations. This switch reduces
code size and improves performance in case the destination is already aligned,
but gcc don'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 destination is known to be
aligned at least to 4 byte boundary. This enables more inlining, increase code
size, but may improve performance of code that depends on fast memcpy, strlen
and memset for short lengths.
! .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\-frame\-pointer\fR removes the frame pointer for all functions
which might make debugging harder.
.PP
These \fB\-m\fR switches are supported in addition to the above
on \s-1AMD\s0 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"
.PD
Generate code for a 32\-bit or 64\-bit environment.
*************** The 32\-bit environment sets int, long a
*** 7543,7588 ****
generates code that runs on any i386 system.
The 64\-bit environment sets int to 32 bits and long and pointer
to 64 bits and generates code for \s-1AMD\s0's x86\-64 architecture.
! .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 \s-1ABI\s0, it is a 128\-byte area beyond the location of the
stack pointer that will not be 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 but symbols can be located anywhere in the
address space. Programs can be statically or dynamically linked, but
building of shared libraries are not supported with the medium model.
! .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. Currently \s-1GCC\s0 does not implement
this model.
.PP
! .I "\s-1HPPA\s0 Options"
.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\s0 1.0, \fB1.1\fR for \s-1PA\s0
1.1, and \fB2.0\fR for \s-1PA\s0 2.0 processors. Refer to
! \&\fI/usr/lib/sched.models\fR on an \s-1HP-UX\s0 system to determine the proper
architecture option for your machine. Code compiled for lower numbered
architectures will run on higher numbered architectures, but not the
other way around.
--- 7566,7611 ----
generates code that runs on any i386 system.
The 64\-bit environment sets int to 32 bits and long and pointer
to 64 bits and generates code for \s-1AMD\s0's x86\-64 architecture.
! .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 \s-1ABI\s0, it is a 128\-byte area beyond the location of the
stack pointer that will not be 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 but symbols can be located anywhere in the
address space. Programs can be statically or dynamically linked, but
building of shared libraries are not supported with the medium model.
! .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. Currently \s-1GCC\s0 does not implement
this model.
.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\s0 1.0, \fB1.1\fR for \s-1PA\s0
1.1, and \fB2.0\fR for \s-1PA\s0 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 will run on higher numbered architectures, but not the
other way around.
*************** other way around.
*** 7590,7704 ****
\&\s-1PA\s0 2.0 support currently requires gas snapshot 19990413 or later. The
next release of binutils (current is 2.9.1) will probably contain \s-1PA\s0 2.0
support.
! .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\-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\-mjump-in-delay\fR" 4
.IX Item "-mjump-in-delay"
Fill delay slots of function calls with unconditional jump instructions
by modifying the return pointer for the function call to be the target
of the conditional jump.
! .Ip "\fB\-mdisable-fpregs\fR" 4
.IX Item "-mdisable-fpregs"
Prevent floating point registers from being used in any manner. This is
necessary for compiling kernels which perform lazy context switching of
floating point registers. If you use this option and attempt to perform
floating point operations, the compiler will abort.
! .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\-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\-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 which performs faster indirect calls.
.Sp
This option will not work in the presence of shared libraries or nested
functions.
! .Ip "\fB\-mlong-load-store\fR" 4
.IX Item "-mlong-load-store"
Generate 3\-instruction load and store sequences as sometimes required by
! the \s-1HP-UX\s0 10 linker. This is equivalent to the \fB+k\fR option to
the \s-1HP\s0 compilers.
! .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\-mgas\fR" 4
.IX Item "-mgas"
Enable the use of assembler directives only \s-1GAS\s0 understands.
! .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 \s-1HP-UX\s0 system to determine the
proper scheduling option for your machine. The default scheduling is
\&\fB8000\fR.
! .Ip "\fB\-mlinker-opt\fR" 4
.IX Item "-mlinker-opt"
! Enable the optimization pass in the \s-1HP-UX\s0 linker. Note this makes symbolic
! debugging impossible. It also triggers a bug in the \s-1HP-UX\s0 8 and \s-1HP-UX\s0 9
linkers in which they give bogus error messages when linking some programs.
! .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. The embedded target \fBhppa1.1\-*\-pro\fR
does 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\-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 \s-1HP-UX\s0 and \s-1HI-UX\s0.
! .Ip "\fB\-mgnu-ld\fR" 4
.IX Item "-mgnu-ld"
Use \s-1GNU\s0 ld specific options. This passes \fB\-shared\fR to ld 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
have any affect on which ld is called, it only changes what parameters
are passed to that ld. The ld that is called is determined by the
! \&\fB\*(--with-ld\fR configure option, gcc'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.
! .Ip "\fB\-mhp-ld\fR" 4
.IX Item "-mhp-ld"
Use \s-1HP\s0 ld specific options. This passes \fB\-b\fR to ld when building
a shared library and passes \fB+Accept TypeMismatch\fR to ld 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 have any affect on
which ld is called, it only changes what parameters are passed to that
! ld. The ld that is called is determined by the \fB\*(--with-ld\fR
configure option, gcc'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.
! .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
--- 7613,7727 ----
\&\s-1PA\s0 2.0 support currently requires gas snapshot 19990413 or later. The
next release of binutils (current is 2.9.1) will probably contain \s-1PA\s0 2.0
support.
! .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\-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\-mjump\-in\-delay\fR" 4
.IX Item "-mjump-in-delay"
Fill delay slots of function calls with unconditional jump instructions
by modifying the return pointer for the function call to be the target
of the conditional jump.
! .IP "\fB\-mdisable\-fpregs\fR" 4
.IX Item "-mdisable-fpregs"
Prevent floating point registers from being used in any manner. This is
necessary for compiling kernels which perform lazy context switching of
floating point registers. If you use this option and attempt to perform
floating point operations, the compiler will abort.
! .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\-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\-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 which performs faster indirect calls.
.Sp
This option will not work in the presence of shared libraries or nested
functions.
! .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\-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\-mgas\fR" 4
.IX Item "-mgas"
Enable the use of assembler directives only \s-1GAS\s0 understands.
! .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\-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\-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. The embedded target \fBhppa1.1\-*\-pro\fR
does 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\-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 \s-1HI\-UX\s0.
! .IP "\fB\-mgnu\-ld\fR" 4
.IX Item "-mgnu-ld"
Use \s-1GNU\s0 ld specific options. This passes \fB\-shared\fR to ld 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
have any affect on which ld is called, it only changes what parameters
are passed to that ld. The ld that is called is determined by the
! \&\fB\-\-with\-ld\fR configure option, gcc'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.
! .IP "\fB\-mhp\-ld\fR" 4
.IX Item "-mhp-ld"
Use \s-1HP\s0 ld specific options. This passes \fB\-b\fR to ld when building
a shared library and passes \fB+Accept TypeMismatch\fR to ld 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 have any affect on
which ld is called, it only changes what parameters are passed to that
! ld. The ld that is called is determined by the \fB\-\-with\-ld\fR
configure option, gcc'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.
! .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
*************** normal calls are 7,600,000 and 240,000 b
*** 7710,7717 ****
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 \s-1HP-UX\s0 with
the \s-1SOM\s0 linker.
.Sp
It is normally not desirable to use this option as it will degrade
--- 7733,7740 ----
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 will degrade
*************** impact on systems that support long abso
*** 7724,7757 ****
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\-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 \s-1HP-UX\s0 10 and later.
! .Ip "\fB\-static\fR" 4
.IX Item "-static"
! The \s-1HP-UX\s0 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 \s-1HP-UX\s0 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 \s-1HP-UX\s0. This option sets flags for both the preprocessor and
linker.
.PP
! .I "Intel 960 Options"
.IX Subsection "Intel 960 Options"
.PP
These \fB\-m\fR options are defined for the Intel 960 implementations:
! .Ip "\fB\-m\fR\fIcpu-type\fR" 4
.IX Item "-mcpu-type"
Assume the defaults for the machine type \fIcpu-type\fR for some of
the other options, including instruction scheduling, floating point
--- 7747,7780 ----
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\-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 \s-1HP\-UX\s0. This option sets flags for both the preprocessor and
linker.
.PP
! \fIIntel 960 Options\fR
.IX Subsection "Intel 960 Options"
.PP
These \fB\-m\fR options are defined for the Intel 960 implementations:
! .IP "\fB\-m\fR\fIcpu-type\fR" 4
.IX Item "-mcpu-type"
Assume the defaults for the machine type \fIcpu-type\fR for some of
the other options, including instruction scheduling, floating point
*************** support, and addressing modes. The choi
*** 7760,7778 ****
\&\fBsa\fR, and \fBsb\fR.
The default is
\&\fBkb\fR.
! .Ip "\fB\-mnumerics\fR" 4
.IX Item "-mnumerics"
.PD 0
! .Ip "\fB\-msoft-float\fR" 4
.IX Item "-msoft-float"
.PD
The \fB\-mnumerics\fR option indicates that the processor does support
! floating-point instructions. The \fB\-msoft-float\fR option indicates
that floating-point support should not be assumed.
! .Ip "\fB\-mleaf-procedures\fR" 4
.IX Item "-mleaf-procedures"
.PD 0
! .Ip "\fB\-mno-leaf-procedures\fR" 4
.IX Item "-mno-leaf-procedures"
.PD
Do (or do not) attempt to alter leaf procedures to be callable with the
--- 7783,7801 ----
\&\fBsa\fR, and \fBsb\fR.
The default is
\&\fBkb\fR.
! .IP "\fB\-mnumerics\fR" 4
.IX Item "-mnumerics"
.PD 0
! .IP "\fB\-msoft\-float\fR" 4
.IX Item "-msoft-float"
.PD
The \fB\-mnumerics\fR option indicates that the processor does support
! floating-point instructions. The \fB\-msoft\-float\fR option indicates
that floating-point support should not be assumed.
! .IP "\fB\-mleaf\-procedures\fR" 4
.IX Item "-mleaf-procedures"
.PD 0
! .IP "\fB\-mno\-leaf\-procedures\fR" 4
.IX Item "-mno-leaf-procedures"
.PD
Do (or do not) attempt to alter leaf procedures to be callable with the
*************** efficient code for explicit calls when t
*** 7781,7864 ****
substituted by the assembler or linker, but less efficient code in other
cases, such as calls via function pointers, or using a linker that doesn't
support this optimization.
! .Ip "\fB\-mtail-call\fR" 4
.IX Item "-mtail-call"
.PD 0
! .Ip "\fB\-mno-tail-call\fR" 4
.IX Item "-mno-tail-call"
.PD
Do (or do not) make additional attempts (beyond those of the
machine-independent portions of the compiler) to optimize tail-recursive
calls into branches. You may not want to do this because the detection of
cases where this is not valid is not totally complete. The default is
! \&\fB\-mno-tail-call\fR.
! .Ip "\fB\-mcomplex-addr\fR" 4
.IX Item "-mcomplex-addr"
.PD 0
! .Ip "\fB\-mno-complex-addr\fR" 4
.IX Item "-mno-complex-addr"
.PD
Assume (or do not assume) that the use of a complex addressing mode is a
win on this implementation of the i960. Complex addressing modes may not
! be worthwhile on the K-series, but they definitely are on the C-series.
! The default is currently \fB\-mcomplex-addr\fR for all processors except
the \s-1CB\s0 and \s-1CC\s0.
! .Ip "\fB\-mcode-align\fR" 4
.IX Item "-mcode-align"
.PD 0
! .Ip "\fB\-mno-code-align\fR" 4
.IX Item "-mno-code-align"
.PD
Align code to 8\-byte boundaries for faster fetching (or don't bother).
! Currently turned on by default for C-series implementations only.
! .Ip "\fB\-mic-compat\fR" 4
.IX Item "-mic-compat"
.PD 0
! .Ip "\fB\-mic2.0\-compat\fR" 4
.IX Item "-mic2.0-compat"
! .Ip "\fB\-mic3.0\-compat\fR" 4
.IX Item "-mic3.0-compat"
.PD
Enable compatibility with iC960 v2.0 or v3.0.
! .Ip "\fB\-masm-compat\fR" 4
.IX Item "-masm-compat"
.PD 0
! .Ip "\fB\-mintel-asm\fR" 4
.IX Item "-mintel-asm"
.PD
Enable compatibility with the iC960 assembler.
! .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 permit (do permit) unaligned accesses.
! .Ip "\fB\-mold-align\fR" 4
.IX Item "-mold-align"
Enable structure-alignment compatibility with Intel's gcc release version
! 1.3 (based on gcc 1.37). This option implies \fB\-mstrict-align\fR.
! .Ip "\fB\-mlong-double-64\fR" 4
.IX Item "-mlong-double-64"
Implement type \fBlong double\fR as 64\-bit floating point numbers.
Without the option \fBlong double\fR is implemented by 80\-bit
floating point numbers. The only reason we have it because there is
! no 128\-bit \fBlong double\fR support in \fBfp-bit.c\fR yet. So it
is only useful for people using soft-float targets. Otherwise, we
should recommend against use of it.
.PP
! .I "\s-1DEC\s0 Alpha Options"
.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 will be 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
--- 7804,7887 ----
substituted by the assembler or linker, but less efficient code in other
cases, such as calls via function pointers, or using a linker that doesn't
support this optimization.
! .IP "\fB\-mtail\-call\fR" 4
.IX Item "-mtail-call"
.PD 0
! .IP "\fB\-mno\-tail\-call\fR" 4
.IX Item "-mno-tail-call"
.PD
Do (or do not) make additional attempts (beyond those of the
machine-independent portions of the compiler) to optimize tail-recursive
calls into branches. You may not want to do this because the detection of
cases where this is not valid is not totally complete. The default is
! \&\fB\-mno\-tail\-call\fR.
! .IP "\fB\-mcomplex\-addr\fR" 4
.IX Item "-mcomplex-addr"
.PD 0
! .IP "\fB\-mno\-complex\-addr\fR" 4
.IX Item "-mno-complex-addr"
.PD
Assume (or do not assume) that the use of a complex addressing mode is a
win on this implementation of the i960. Complex addressing modes may not
! be worthwhile on the K\-series, but they definitely are on the C\-series.
! The default is currently \fB\-mcomplex\-addr\fR for all processors except
the \s-1CB\s0 and \s-1CC\s0.
! .IP "\fB\-mcode\-align\fR" 4
.IX Item "-mcode-align"
.PD 0
! .IP "\fB\-mno\-code\-align\fR" 4
.IX Item "-mno-code-align"
.PD
Align code to 8\-byte boundaries for faster fetching (or don't bother).
! Currently turned on by default for C\-series implementations only.
! .IP "\fB\-mic\-compat\fR" 4
.IX Item "-mic-compat"
.PD 0
! .IP "\fB\-mic2.0\-compat\fR" 4
.IX Item "-mic2.0-compat"
! .IP "\fB\-mic3.0\-compat\fR" 4
.IX Item "-mic3.0-compat"
.PD
Enable compatibility with iC960 v2.0 or v3.0.
! .IP "\fB\-masm\-compat\fR" 4
.IX Item "-masm-compat"
.PD 0
! .IP "\fB\-mintel\-asm\fR" 4
.IX Item "-mintel-asm"
.PD
Enable compatibility with the iC960 assembler.
! .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 permit (do permit) unaligned accesses.
! .IP "\fB\-mold\-align\fR" 4
.IX Item "-mold-align"
Enable structure-alignment compatibility with Intel's gcc release version
! 1.3 (based on gcc 1.37). This option implies \fB\-mstrict\-align\fR.
! .IP "\fB\-mlong\-double\-64\fR" 4
.IX Item "-mlong-double-64"
Implement type \fBlong double\fR as 64\-bit floating point numbers.
Without the option \fBlong double\fR is implemented by 80\-bit
floating point numbers. The only reason we have it because there is
! no 128\-bit \fBlong double\fR support in \fBfp\-bit.c\fR yet. So it
is only useful for people using soft-float targets. Otherwise, we
should recommend against use of it.
.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 will be 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
*************** them.
*** 7869,7892 ****
.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\*(C`$0\*(C'\fR instead of \f(CW\*(C`$f0\*(C'\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
--- 7892,7915 ----
.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
*************** defined during compilation. The resulti
*** 7898,7904 ****
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
--- 7921,7927 ----
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
*************** significantly slower than the code gener
*** 7909,7957 ****
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 \fBsu\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
--- 7932,7980 ----
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 \fBsu\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 towards plus infinity. Thus, u
*** 7961,7967 ****
.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
--- 7984,7990 ----
.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
*************** in determining the exact location that c
*** 7971,7985 ****
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.
--- 7994,8008 ----
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.
*************** instruction that caused a floating point
*** 7989,8003 ****
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. Under \s-1DEC\s0 Unix, this has the effect that
IEEE-conformant math library routines will be linked in.
! .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
--- 8012,8026 ----
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. Under \s-1DEC\s0 Unix, this has the effect that
IEEE-conformant math library routines will be linked in.
! .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
*************** using code, even if it takes more instru
*** 8010,8057 ****
You would 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\-malpha-as\fR" 4
.IX Item "-malpha-as"
.PD 0
! .Ip "\fB\-mgas\fR" 4
.IX Item "-mgas"
.PD
Select whether to generate code to be assembled by the vendor-supplied
! assembler (\fB\-malpha-as\fR) or by the \s-1GNU\s0 assembler \fB\-mgas\fR.
! .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\s0,
\&\s-1CIX\s0, \s-1FIX\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 was 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\s0 F 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
--- 8033,8080 ----
You would 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\-malpha\-as\fR" 4
.IX Item "-malpha-as"
.PD 0
! .IP "\fB\-mgas\fR" 4
.IX Item "-mgas"
.PD
Select whether to generate code to be assembled by the vendor-supplied
! assembler (\fB\-malpha\-as\fR) or by the \s-1GNU\s0 assembler \fB\-mgas\fR.
! .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\s0,
\&\s-1CIX\s0, \s-1FIX\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 was 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\s0 F 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
*************** supports a new syntax that allows the co
*** 8061,8088 ****
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\*(C`$gp\*(C'\fR register. This limits the
size of the small data area to 64KB, but allows the variables to be
directly accessed via a single instruction.
.Sp
! 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\-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
--- 8084,8111 ----
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
size of the small data area to 64KB, but allows the variables to be
directly accessed via a single instruction.
.Sp
! 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\-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
*************** to the processor on which the compiler w
*** 8094,8153 ****
.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\s0, \s-1FIX\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\s0, \s-1CIX\s0, \s-1FIX\s0, and \s-1MAX\s0 extensions.
.RE
.RS 4
.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.
! .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
--- 8117,8176 ----
.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\s0, \s-1FIX\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\s0, \s-1CIX\s0, \s-1FIX\s0, and \s-1MAX\s0 extensions.
.RE
.RS 4
.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.
! .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
*** 8156,8172 ****
.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
--- 8179,8195 ----
.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
*************** Note that L3 is only valid for \s-1EV5\s
*** 8177,8351 ****
.RS 4
.RE
.PP
! .I "\s-1DEC\s0 Alpha/VMS Options"
.IX Subsection "DEC Alpha/VMS Options"
.PP
These \fB\-m\fR options are defined for the \s-1DEC\s0 Alpha/VMS implementations:
! .Ip "\fB\-mvms-return-codes\fR" 4
.IX Item "-mvms-return-codes"
Return \s-1VMS\s0 condition codes from main. The default is to return \s-1POSIX\s0
style condition (e.g. error) codes.
.PP
! .I "H8/300 Options"
.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 \-mh or \-ms.
! .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\-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 4
byte boundaries.
! \&\fB\-malign-300\fR causes them to be aligned on 2 byte boundaries.
This option has no effect on the H8/300.
.PP
! .I "\s-1SH\s0 Options"
.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\-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\-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 will
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\-mfmovd\fR" 4
.IX Item "-mfmovd"
Enable the use of the instruction \f(CW\*(C`fmovd\*(C'\fR.
! .Ip "\fB\-mhitachi\fR" 4
.IX Item "-mhitachi"
Comply with the calling conventions defined by Renesas.
! .Ip "\fB\-mnomacsave\fR" 4
.IX Item "-mnomacsave"
! Mark the \f(CW\*(C`MAC\*(C'\fR register as call-clobbered, even if
\&\fB\-mhitachi\fR is given.
! .Ip "\fB\-mieee\fR" 4
.IX Item "-mieee"
Increase IEEE-compliance of floating-point code.
! .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\s0 \s-1ABI\s0.
! .Ip "\fB\-mspace\fR" 4
.IX Item "-mspace"
Optimize for space instead of speed. Implied by \fB\-Os\fR.
! .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"
Generate a library function call to invalidate instruction cache
entries, after fixing up a trampoline. This library function call
doesn't assume it can write to the whole memory address space. This
is the default when the target is \f(CW\*(C`sh\-*\-linux*\*(C'\fR.
.PP
! .I "Options for System V"
.IX Subsection "Options for System V"
.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.
.PP
! .I "TMS320C3x/C4x Options"
.IX Subsection "TMS320C3x/C4x Options"
.PP
These \fB\-m\fR options are defined for TMS320C3x/C4x implementations:
! .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 \fBc30\fR, \fBc31\fR, \fBc32\fR, \fBc40\fR, and
\&\fBc44\fR. The default is \fBc40\fR to generate code for the
\&\s-1TMS320C40\s0.
! .Ip "\fB\-mbig-memory\fR" 4
.IX Item "-mbig-memory"
.PD 0
! .Ip "\fB\-mbig\fR" 4
.IX Item "-mbig"
! .Ip "\fB\-msmall-memory\fR" 4
.IX Item "-msmall-memory"
! .Ip "\fB\-msmall\fR" 4
.IX Item "-msmall"
.PD
Generates code for the big or small memory model. The small memory
--- 8200,8374 ----
.RS 4
.RE
.PP
! \fI\s-1DEC\s0 Alpha/VMS Options\fR
.IX Subsection "DEC Alpha/VMS Options"
.PP
These \fB\-m\fR options are defined for the \s-1DEC\s0 Alpha/VMS implementations:
! .IP "\fB\-mvms\-return\-codes\fR" 4
.IX Item "-mvms-return-codes"
Return \s-1VMS\s0 condition codes from main. The default is to return \s-1POSIX\s0
style condition (e.g. error) codes.
.PP
! \fIH8/300 Options\fR
.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 \-mh or \-ms.
! .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\-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 4
byte boundaries.
! \&\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-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\-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\-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 will
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\-mfmovd\fR" 4
.IX Item "-mfmovd"
Enable the use of the instruction \f(CW\*(C`fmovd\*(C'\fR.
! .IP "\fB\-mhitachi\fR" 4
.IX Item "-mhitachi"
Comply with the calling conventions defined by Renesas.
! .IP "\fB\-mnomacsave\fR" 4
.IX Item "-mnomacsave"
! Mark the \f(CW\*(C`MAC\*(C'\fR register as call\-clobbered, even if
\&\fB\-mhitachi\fR is given.
! .IP "\fB\-mieee\fR" 4
.IX Item "-mieee"
Increase IEEE-compliance of floating-point code.
! .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\s0 \s-1ABI\s0.
! .IP "\fB\-mspace\fR" 4
.IX Item "-mspace"
Optimize for space instead of speed. Implied by \fB\-Os\fR.
! .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"
Generate a library function call to invalidate instruction cache
entries, after fixing up a trampoline. This library function call
doesn't assume it can write to the whole memory address space. This
is the default when the target is \f(CW\*(C`sh\-*\-linux*\*(C'\fR.
.PP
! \fIOptions for System V\fR
.IX Subsection "Options for System V"
.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.
.PP
! \fITMS320C3x/C4x Options\fR
.IX Subsection "TMS320C3x/C4x Options"
.PP
These \fB\-m\fR options are defined for TMS320C3x/C4x implementations:
! .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 \fBc30\fR, \fBc31\fR, \fBc32\fR, \fBc40\fR, and
\&\fBc44\fR. The default is \fBc40\fR to generate code for the
\&\s-1TMS320C40\s0.
! .IP "\fB\-mbig\-memory\fR" 4
.IX Item "-mbig-memory"
.PD 0
! .IP "\fB\-mbig\fR" 4
.IX Item "-mbig"
! .IP "\fB\-msmall\-memory\fR" 4
.IX Item "-msmall-memory"
! .IP "\fB\-msmall\fR" 4
.IX Item "-msmall"
.PD
Generates code for the big or small memory model. The small memory
*************** the data page (\s-1DP\s0) register must
*** 8354,8375 ****
containing the .bss and .data program sections. The big memory model is
the default and requires reloading of the \s-1DP\s0 register for every direct
memory access.
! .Ip "\fB\-mbk\fR" 4
.IX Item "-mbk"
.PD 0
! .Ip "\fB\-mno-bk\fR" 4
.IX Item "-mno-bk"
.PD
Allow (disallow) allocation of general integer operands into the block
count register \s-1BK\s0.
! .Ip "\fB\-mdb\fR" 4
.IX Item "-mdb"
.PD 0
! .Ip "\fB\-mno-db\fR" 4
.IX Item "-mno-db"
.PD
Enable (disable) generation of code using decrement and branch,
! \&\fIDBcond\fR\|(D), instructions. This is enabled by default for the C4x. To be
on the safe side, this is disabled for the C3x, since the maximum
iteration count on the C3x is 2^{23 + 1} (but who iterates loops more than
2^{23} times on the C3x?). Note that \s-1GCC\s0 will try to reverse a loop so
--- 8377,8398 ----
containing the .bss and .data program sections. The big memory model is
the default and requires reloading of the \s-1DP\s0 register for every direct
memory access.
! .IP "\fB\-mbk\fR" 4
.IX Item "-mbk"
.PD 0
! .IP "\fB\-mno\-bk\fR" 4
.IX Item "-mno-bk"
.PD
Allow (disallow) allocation of general integer operands into the block
count register \s-1BK\s0.
! .IP "\fB\-mdb\fR" 4
.IX Item "-mdb"
.PD 0
! .IP "\fB\-mno\-db\fR" 4
.IX Item "-mno-db"
.PD
Enable (disable) generation of code using decrement and branch,
! DBcond(D), instructions. This is enabled by default for the C4x. To be
on the safe side, this is disabled for the C3x, since the maximum
iteration count on the C3x is 2^{23 + 1} (but who iterates loops more than
2^{23} times on the C3x?). Note that \s-1GCC\s0 will try to reverse a loop so
*************** that it can utilize the decrement and br
*** 8377,8386 ****
up if there is more than one memory reference in the loop. Thus a loop
where the loop counter is decremented can generate slightly more
efficient code, in cases where the \s-1RPTB\s0 instruction cannot be utilized.
! .Ip "\fB\-mdp-isr-reload\fR" 4
.IX Item "-mdp-isr-reload"
.PD 0
! .Ip "\fB\-mparanoid\fR" 4
.IX Item "-mparanoid"
.PD
Force the \s-1DP\s0 register to be saved on entry to an interrupt service
--- 8400,8409 ----
up if there is more than one memory reference in the loop. Thus a loop
where the loop counter is decremented can generate slightly more
efficient code, in cases where the \s-1RPTB\s0 instruction cannot be utilized.
! .IP "\fB\-mdp\-isr\-reload\fR" 4
.IX Item "-mdp-isr-reload"
.PD 0
! .IP "\fB\-mparanoid\fR" 4
.IX Item "-mparanoid"
.PD
Force the \s-1DP\s0 register to be saved on entry to an interrupt service
*************** routine (\s-1ISR\s0), reloaded to point
*** 8388,8397 ****
exit from the \s-1ISR\s0. This should not be required unless someone has
violated the small memory model by modifying the \s-1DP\s0 register, say within
an object library.
! .Ip "\fB\-mmpyi\fR" 4
.IX Item "-mmpyi"
.PD 0
! .Ip "\fB\-mno-mpyi\fR" 4
.IX Item "-mno-mpyi"
.PD
For the C3x use the 24\-bit \s-1MPYI\s0 instruction for integer multiplies
--- 8411,8420 ----
exit from the \s-1ISR\s0. This should not be required unless someone has
violated the small memory model by modifying the \s-1DP\s0 register, say within
an object library.
! .IP "\fB\-mmpyi\fR" 4
.IX Item "-mmpyi"
.PD 0
! .IP "\fB\-mno\-mpyi\fR" 4
.IX Item "-mno-mpyi"
.PD
For the C3x use the 24\-bit \s-1MPYI\s0 instruction for integer multiplies
*************** instead of a library call to guarantee 3
*** 8399,8408 ****
of the operands is a constant, then the multiplication will be performed
using shifts and adds. If the \fB\-mmpyi\fR option is not specified for the C3x,
then squaring operations are performed inline instead of a library call.
! .Ip "\fB\-mfast-fix\fR" 4
.IX Item "-mfast-fix"
.PD 0
! .Ip "\fB\-mno-fast-fix\fR" 4
.IX Item "-mno-fast-fix"
.PD
The C3x/C4x \s-1FIX\s0 instruction to convert a floating point value to an
--- 8422,8431 ----
of the operands is a constant, then the multiplication will be performed
using shifts and adds. If the \fB\-mmpyi\fR option is not specified for the C3x,
then squaring operations are performed inline instead of a library call.
! .IP "\fB\-mfast\-fix\fR" 4
.IX Item "-mfast-fix"
.PD 0
! .IP "\fB\-mno\-fast\-fix\fR" 4
.IX Item "-mno-fast-fix"
.PD
The C3x/C4x \s-1FIX\s0 instruction to convert a floating point value to an
*************** floating point number is negative, the r
*** 8412,8421 ****
truncated an additional code is necessary to detect and correct this
case. This option can be used to disable generation of the additional
code required to correct the result.
! .Ip "\fB\-mrptb\fR" 4
.IX Item "-mrptb"
.PD 0
! .Ip "\fB\-mno-rptb\fR" 4
.IX Item "-mno-rptb"
.PD
Enable (disable) generation of repeat block sequences using the \s-1RPTB\s0
--- 8435,8444 ----
truncated an additional code is necessary to detect and correct this
case. This option can be used to disable generation of the additional
code required to correct the result.
! .IP "\fB\-mrptb\fR" 4
.IX Item "-mrptb"
.PD 0
! .IP "\fB\-mno\-rptb\fR" 4
.IX Item "-mno-rptb"
.PD
Enable (disable) generation of repeat block sequences using the \s-1RPTB\s0
*************** for innermost loops that do not call fun
*** 8424,8433 ****
boundaries. There is no advantage having nested \s-1RPTB\s0 loops due to the
overhead required to save and restore the \s-1RC\s0, \s-1RS\s0, and \s-1RE\s0 registers.
This is enabled by default with \fB\-O2\fR.
! .Ip "\fB\-mrpts=\fR\fIcount\fR" 4
.IX Item "-mrpts=count"
.PD 0
! .Ip "\fB\-mno-rpts\fR" 4
.IX Item "-mno-rpts"
.PD
Enable (disable) the use of the single instruction repeat instruction
--- 8447,8456 ----
boundaries. There is no advantage having nested \s-1RPTB\s0 loops due to the
overhead required to save and restore the \s-1RC\s0, \s-1RS\s0, and \s-1RE\s0 registers.
This is enabled by default with \fB\-O2\fR.
! .IP "\fB\-mrpts=\fR\fIcount\fR" 4
.IX Item "-mrpts=count"
.PD 0
! .IP "\fB\-mno\-rpts\fR" 4
.IX Item "-mno-rpts"
.PD
Enable (disable) the use of the single instruction repeat instruction
*************** at compile time. Note that the repeated
*** 8439,8448 ****
not have to be reloaded from memory each iteration, thus freeing up the
\&\s-1CPU\s0 buses for operands. However, since interrupts are blocked by this
instruction, it is disabled by default.
! .Ip "\fB\-mloop-unsigned\fR" 4
.IX Item "-mloop-unsigned"
.PD 0
! .Ip "\fB\-mno-loop-unsigned\fR" 4
.IX Item "-mno-loop-unsigned"
.PD
The maximum iteration count when using \s-1RPTS\s0 and \s-1RPTB\s0 (and \s-1DB\s0 on the C40)
--- 8462,8471 ----
not have to be reloaded from memory each iteration, thus freeing up the
\&\s-1CPU\s0 buses for operands. However, since interrupts are blocked by this
instruction, it is disabled by default.
! .IP "\fB\-mloop\-unsigned\fR" 4
.IX Item "-mloop-unsigned"
.PD 0
! .IP "\fB\-mno\-loop\-unsigned\fR" 4
.IX Item "-mno-loop-unsigned"
.PD
The maximum iteration count when using \s-1RPTS\s0 and \s-1RPTB\s0 (and \s-1DB\s0 on the C40)
*************** is 2^{31 + 1} since these instructions t
*** 8450,8557 ****
negative to terminate the loop. If the iteration count is unsigned
there is a possibility than the 2^{31 + 1} maximum iteration count may be
exceeded. This switch allows an unsigned iteration count.
! .Ip "\fB\-mti\fR" 4
.IX Item "-mti"
Try to emit an assembler syntax that the \s-1TI\s0 assembler (asm30) is happy
with. This also enforces compatibility with the \s-1API\s0 employed by the \s-1TI\s0
C3x C compiler. For example, long doubles are passed as structures
rather than in floating point registers.
! .Ip "\fB\-mregparm\fR" 4
.IX Item "-mregparm"
.PD 0
! .Ip "\fB\-mmemparm\fR" 4
.IX Item "-mmemparm"
.PD
Generate code that uses registers (stack) for passing arguments to functions.
By default, arguments are passed in registers where possible rather
than by pushing arguments on to the stack.
! .Ip "\fB\-mparallel-insns\fR" 4
.IX Item "-mparallel-insns"
.PD 0
! .Ip "\fB\-mno-parallel-insns\fR" 4
.IX Item "-mno-parallel-insns"
.PD
Allow the generation of parallel instructions. This is enabled by
default with \fB\-O2\fR.
! .Ip "\fB\-mparallel-mpy\fR" 4
.IX Item "-mparallel-mpy"
.PD 0
! .Ip "\fB\-mno-parallel-mpy\fR" 4
.IX Item "-mno-parallel-mpy"
.PD
Allow the generation of MPY||ADD and MPY||SUB parallel instructions,
! provided \fB\-mparallel-insns\fR is also specified. These instructions have
tight register constraints which can pessimize the code generation
of large functions.
.PP
! .I "V850 Options"
.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 will always load the functions address up into a
register, and call 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 function. The external functions
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\-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 will cause 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 will cause r2 and r5 to be treated as fixed registers.
! .Ip "\fB\-mv850e\fR" 4
.IX Item "-mv850e"
Specify that the target processor is the V850E. The preprocessor
constant \fB_\|_v850e_\|_\fR will be defined if this option is used.
--- 8473,8580 ----
negative to terminate the loop. If the iteration count is unsigned
there is a possibility than the 2^{31 + 1} maximum iteration count may be
exceeded. This switch allows an unsigned iteration count.
! .IP "\fB\-mti\fR" 4
.IX Item "-mti"
Try to emit an assembler syntax that the \s-1TI\s0 assembler (asm30) is happy
with. This also enforces compatibility with the \s-1API\s0 employed by the \s-1TI\s0
C3x C compiler. For example, long doubles are passed as structures
rather than in floating point registers.
! .IP "\fB\-mregparm\fR" 4
.IX Item "-mregparm"
.PD 0
! .IP "\fB\-mmemparm\fR" 4
.IX Item "-mmemparm"
.PD
Generate code that uses registers (stack) for passing arguments to functions.
By default, arguments are passed in registers where possible rather
than by pushing arguments on to the stack.
! .IP "\fB\-mparallel\-insns\fR" 4
.IX Item "-mparallel-insns"
.PD 0
! .IP "\fB\-mno\-parallel\-insns\fR" 4
.IX Item "-mno-parallel-insns"
.PD
Allow the generation of parallel instructions. This is enabled by
default with \fB\-O2\fR.
! .IP "\fB\-mparallel\-mpy\fR" 4
.IX Item "-mparallel-mpy"
.PD 0
! .IP "\fB\-mno\-parallel\-mpy\fR" 4
.IX Item "-mno-parallel-mpy"
.PD
Allow the generation of MPY||ADD and MPY||SUB parallel instructions,
! provided \fB\-mparallel\-insns\fR is also specified. These instructions have
tight register constraints which can pessimize the code generation
of large functions.
.PP
! \fIV850 Options\fR
.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 will always load the functions address up into a
register, and call 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 function. The external functions
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\-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 will cause 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 will cause r2 and r5 to be treated as fixed registers.
! .IP "\fB\-mv850e\fR" 4
.IX Item "-mv850e"
Specify that the target processor is the V850E. The preprocessor
constant \fB_\|_v850e_\|_\fR will be defined if this option is used.
*************** then a default target processor will be
*** 8562,8584 ****
.Sp
The preprocessor constants \fB_\|_v850\fR and \fB_\|_v851_\|_\fR are always
defined, regardless of which processor variant is the target.
! .Ip "\fB\-mdisable-callt\fR" 4
.IX Item "-mdisable-callt"
This option will suppress generation of the \s-1CALLT\s0 instruction for the
v850e flavors of the v850 architecture. The default is
! \&\fB\-mno-disable-callt\fR which allows the \s-1CALLT\s0 instruction to be used.
.PP
! .I "\s-1ARC\s0 Options"
.IX Subsection "ARC Options"
.PP
These options are defined for \s-1ARC\s0 implementations:
! .Ip "\fB\-EL\fR" 4
.IX Item "-EL"
Compile code for little endian mode. This is the default.
! .Ip "\fB\-EB\fR" 4
.IX Item "-EB"
Compile code for big endian mode.
! .Ip "\fB\-mmangle-cpu\fR" 4
.IX Item "-mmangle-cpu"
Prepend the name of the cpu to all public symbol names.
In multiple-processor systems, there are many \s-1ARC\s0 variants with different
--- 8585,8607 ----
.Sp
The preprocessor constants \fB_\|_v850\fR and \fB_\|_v851_\|_\fR are always
defined, regardless of which processor variant is the target.
! .IP "\fB\-mdisable\-callt\fR" 4
.IX Item "-mdisable-callt"
This option will suppress generation of the \s-1CALLT\s0 instruction for the
v850e flavors of the v850 architecture. The default is
! \&\fB\-mno\-disable\-callt\fR which allows the \s-1CALLT\s0 instruction to be used.
.PP
! \fI\s-1ARC\s0 Options\fR
.IX Subsection "ARC Options"
.PP
These options are defined for \s-1ARC\s0 implementations:
! .IP "\fB\-EL\fR" 4
.IX Item "-EL"
Compile code for little endian mode. This is the default.
! .IP "\fB\-EB\fR" 4
.IX Item "-EB"
Compile code for big endian mode.
! .IP "\fB\-mmangle\-cpu\fR" 4
.IX Item "-mmangle-cpu"
Prepend the name of the cpu to all public symbol names.
In multiple-processor systems, there are many \s-1ARC\s0 variants with different
*************** instruction and register set characteris
*** 8586,8649 ****
compiled for one cpu to be linked with code compiled for another.
No facility exists for handling variants that are ``almost identical''.
This is an all or nothing option.
! .Ip "\fB\-mcpu=\fR\fIcpu\fR" 4
.IX Item "-mcpu=cpu"
Compile code for \s-1ARC\s0 variant \fIcpu\fR.
Which variants are supported depend on the configuration.
All variants support \fB\-mcpu=base\fR, this is the default.
! .Ip "\fB\-mtext=\fR\fItext-section\fR" 4
.IX Item "-mtext=text-section"
.PD 0
! .Ip "\fB\-mdata=\fR\fIdata-section\fR" 4
.IX Item "-mdata=data-section"
! .Ip "\fB\-mrodata=\fR\fIreadonly-data-section\fR" 4
.IX Item "-mrodata=readonly-data-section"
.PD
Put functions, data, and readonly data in \fItext-section\fR,
\&\fIdata-section\fR, and \fIreadonly-data-section\fR respectively
by default. This can be overridden with the \f(CW\*(C`section\*(C'\fR attribute.
.PP
! .I "\s-1NS32K\s0 Options"
.IX Subsection "NS32K Options"
.PP
These are the \fB\-m\fR options defined for the 32000 series. The default
values for these options depends on which style of 32000 was selected when
the compiler was configured; the defaults for the most common choices are
given below.
! .Ip "\fB\-m32032\fR" 4
.IX Item "-m32032"
.PD 0
! .Ip "\fB\-m32032\fR" 4
.IX Item "-m32032"
.PD
Generate output for a 32032. This is the default
when the compiler is configured for 32032 and 32016 based systems.
! .Ip "\fB\-m32332\fR" 4
.IX Item "-m32332"
.PD 0
! .Ip "\fB\-m32332\fR" 4
.IX Item "-m32332"
.PD
Generate output for a 32332. This is the default
when the compiler is configured for 32332\-based systems.
! .Ip "\fB\-m32532\fR" 4
.IX Item "-m32532"
.PD 0
! .Ip "\fB\-m32532\fR" 4
.IX Item "-m32532"
.PD
Generate output for a 32532. This is the default
when the compiler is configured for 32532\-based systems.
! .Ip "\fB\-m32081\fR" 4
.IX Item "-m32081"
Generate output containing 32081 instructions for floating point.
This is the default for all systems.
! .Ip "\fB\-m32381\fR" 4
.IX Item "-m32381"
Generate output containing 32381 instructions for floating point. This
also implies \fB\-m32081\fR. The 32381 is only compatible with the 32332
and 32532 cpus. This is the default for the pc532\-netbsd configuration.
! .Ip "\fB\-mmulti-add\fR" 4
.IX Item "-mmulti-add"
Try and generate multiply-add floating point instructions \f(CW\*(C`polyF\*(C'\fR
and \f(CW\*(C`dotF\*(C'\fR. This option is only available if the \fB\-m32381\fR
--- 8609,8672 ----
compiled for one cpu to be linked with code compiled for another.
No facility exists for handling variants that are ``almost identical''.
This is an all or nothing option.
! .IP "\fB\-mcpu=\fR\fIcpu\fR" 4
.IX Item "-mcpu=cpu"
Compile code for \s-1ARC\s0 variant \fIcpu\fR.
Which variants are supported depend on the configuration.
All variants support \fB\-mcpu=base\fR, this is the default.
! .IP "\fB\-mtext=\fR\fItext-section\fR" 4
.IX Item "-mtext=text-section"
.PD 0
! .IP "\fB\-mdata=\fR\fIdata-section\fR" 4
.IX Item "-mdata=data-section"
! .IP "\fB\-mrodata=\fR\fIreadonly-data-section\fR" 4
.IX Item "-mrodata=readonly-data-section"
.PD
Put functions, data, and readonly data in \fItext-section\fR,
\&\fIdata-section\fR, and \fIreadonly-data-section\fR respectively
by default. This can be overridden with the \f(CW\*(C`section\*(C'\fR attribute.
.PP
! \fI\s-1NS32K\s0 Options\fR
.IX Subsection "NS32K Options"
.PP
These are the \fB\-m\fR options defined for the 32000 series. The default
values for these options depends on which style of 32000 was selected when
the compiler was configured; the defaults for the most common choices are
given below.
! .IP "\fB\-m32032\fR" 4
.IX Item "-m32032"
.PD 0
! .IP "\fB\-m32032\fR" 4
.IX Item "-m32032"
.PD
Generate output for a 32032. This is the default
when the compiler is configured for 32032 and 32016 based systems.
! .IP "\fB\-m32332\fR" 4
.IX Item "-m32332"
.PD 0
! .IP "\fB\-m32332\fR" 4
.IX Item "-m32332"
.PD
Generate output for a 32332. This is the default
when the compiler is configured for 32332\-based systems.
! .IP "\fB\-m32532\fR" 4
.IX Item "-m32532"
.PD 0
! .IP "\fB\-m32532\fR" 4
.IX Item "-m32532"
.PD
Generate output for a 32532. This is the default
when the compiler is configured for 32532\-based systems.
! .IP "\fB\-m32081\fR" 4
.IX Item "-m32081"
Generate output containing 32081 instructions for floating point.
This is the default for all systems.
! .IP "\fB\-m32381\fR" 4
.IX Item "-m32381"
Generate output containing 32381 instructions for floating point. This
also implies \fB\-m32081\fR. The 32381 is only compatible with the 32332
and 32532 cpus. This is the default for the pc532\-netbsd configuration.
! .IP "\fB\-mmulti\-add\fR" 4
.IX Item "-mmulti-add"
Try and generate multiply-add floating point instructions \f(CW\*(C`polyF\*(C'\fR
and \f(CW\*(C`dotF\*(C'\fR. This option is only available if the \fB\-m32381\fR
*************** option is in effect. Using these instru
*** 8651,8683 ****
register allocation which generally has a negative impact on
performance. This option should only be enabled when compiling code
particularly likely to make heavy use of multiply-add instructions.
! .Ip "\fB\-mnomulti-add\fR" 4
.IX Item "-mnomulti-add"
Do not try and generate multiply-add floating point instructions
\&\f(CW\*(C`polyF\*(C'\fR and \f(CW\*(C`dotF\*(C'\fR. This is the default on all platforms.
! .Ip "\fB\-msoft-float\fR" 4
.IX Item "-msoft-float"
Generate output containing library calls for floating point.
\&\fBWarning:\fR the requisite libraries may not be available.
! .Ip "\fB\-mieee-compare\fR" 4
.IX Item "-mieee-compare"
.PD 0
! .Ip "\fB\-mno-ieee-compare\fR" 4
.IX Item "-mno-ieee-compare"
.PD
Control whether or not the compiler uses \s-1IEEE\s0 floating point
comparisons. These handle correctly the case where the result of a
comparison is unordered.
\&\fBWarning:\fR the requisite kernel support may not be available.
! .Ip "\fB\-mnobitfield\fR" 4
.IX Item "-mnobitfield"
Do not use the bit-field instructions. On some machines it is faster to
use shifting and masking operations. This is the default for the pc532.
! .Ip "\fB\-mbitfield\fR" 4
.IX Item "-mbitfield"
Do use the bit-field instructions. This is the default for all platforms
except the pc532.
! .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 pop their
--- 8674,8706 ----
register allocation which generally has a negative impact on
performance. This option should only be enabled when compiling code
particularly likely to make heavy use of multiply-add instructions.
! .IP "\fB\-mnomulti\-add\fR" 4
.IX Item "-mnomulti-add"
Do not try and generate multiply-add floating point instructions
\&\f(CW\*(C`polyF\*(C'\fR and \f(CW\*(C`dotF\*(C'\fR. This is the default on all platforms.
! .IP "\fB\-msoft\-float\fR" 4
.IX Item "-msoft-float"
Generate output containing library calls for floating point.
\&\fBWarning:\fR the requisite libraries may not be available.
! .IP "\fB\-mieee\-compare\fR" 4
.IX Item "-mieee-compare"
.PD 0
! .IP "\fB\-mno\-ieee\-compare\fR" 4
.IX Item "-mno-ieee-compare"
.PD
Control whether or not the compiler uses \s-1IEEE\s0 floating point
comparisons. These handle correctly the case where the result of a
comparison is unordered.
\&\fBWarning:\fR the requisite kernel support may not be available.
! .IP "\fB\-mnobitfield\fR" 4
.IX Item "-mnobitfield"
Do not use the bit-field instructions. On some machines it is faster to
use shifting and masking operations. This is the default for the pc532.
! .IP "\fB\-mbitfield\fR" 4
.IX Item "-mbitfield"
Do use the bit-field instructions. This is the default for all platforms
except the pc532.
! .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 pop their
*************** function with too many arguments. (Norm
*** 8697,8703 ****
harmlessly ignored.)
.Sp
This option takes its name from the 680x0 \f(CW\*(C`rtd\*(C'\fR instruction.
! .Ip "\fB\-mregparam\fR" 4
.IX Item "-mregparam"
Use a different function-calling convention where the first two arguments
are passed in registers.
--- 8720,8726 ----
harmlessly ignored.)
.Sp
This option takes its name from the 680x0 \f(CW\*(C`rtd\*(C'\fR instruction.
! .IP "\fB\-mregparam\fR" 4
.IX Item "-mregparam"
Use a different function-calling convention where the first two arguments
are passed in registers.
*************** are passed in registers.
*** 8705,8740 ****
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.
! .Ip "\fB\-mnoregparam\fR" 4
.IX Item "-mnoregparam"
Do not pass any arguments in registers. This is the default for all
targets.
! .Ip "\fB\-msb\fR" 4
.IX Item "-msb"
It is \s-1OK\s0 to use the sb as an index register which is always loaded with
zero. This is the default for the pc532\-netbsd target.
! .Ip "\fB\-mnosb\fR" 4
.IX Item "-mnosb"
The sb register is not available for use or has not been initialized to
zero by the run time system. This is the default for all targets except
the pc532\-netbsd. It is also implied whenever \fB\-mhimem\fR or
\&\fB\-fpic\fR is set.
! .Ip "\fB\-mhimem\fR" 4
.IX Item "-mhimem"
Many ns32000 series addressing modes use displacements of up to 512MB.
If an address is above 512MB then displacements from zero can not be used.
This option causes code to be generated which can be loaded above 512MB.
This may be useful for operating systems or \s-1ROM\s0 code.
! .Ip "\fB\-mnohimem\fR" 4
.IX Item "-mnohimem"
Assume code will be loaded in the first 512MB of virtual address space.
This is the default for all platforms.
.PP
! .I "\s-1AVR\s0 Options"
.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 \s-1ATMEL\s0 \s-1AVR\s0 instruction set or \s-1MCU\s0 type.
.Sp
--- 8728,8763 ----
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.
! .IP "\fB\-mnoregparam\fR" 4
.IX Item "-mnoregparam"
Do not pass any arguments in registers. This is the default for all
targets.
! .IP "\fB\-msb\fR" 4
.IX Item "-msb"
It is \s-1OK\s0 to use the sb as an index register which is always loaded with
zero. This is the default for the pc532\-netbsd target.
! .IP "\fB\-mnosb\fR" 4
.IX Item "-mnosb"
The sb register is not available for use or has not been initialized to
zero by the run time system. This is the default for all targets except
the pc532\-netbsd. It is also implied whenever \fB\-mhimem\fR or
\&\fB\-fpic\fR is set.
! .IP "\fB\-mhimem\fR" 4
.IX Item "-mhimem"
Many ns32000 series addressing modes use displacements of up to 512MB.
If an address is above 512MB then displacements from zero can not be used.
This option causes code to be generated which can be loaded above 512MB.
This may be useful for operating systems or \s-1ROM\s0 code.
! .IP "\fB\-mnohimem\fR" 4
.IX Item "-mnohimem"
Assume code will be loaded in the first 512MB of virtual address space.
This is the default for all platforms.
.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 \s-1ATMEL\s0 \s-1AVR\s0 instruction set or \s-1MCU\s0 type.
.Sp
*************** memory space (\s-1MCU\s0 types: atmega8,
*** 8756,8942 ****
Instruction set avr5 is for the enhanced \s-1AVR\s0 core with up to 128K program
memory space (\s-1MCU\s0 types: atmega16, atmega161, atmega163, atmega32, atmega323,
atmega64, atmega128, at43usb355, at94k).
! .Ip "\fB\-msize\fR" 4
.IX Item "-msize"
Output instruction sizes to the asm file.
! .Ip "\fB\-minit-stack=\fR\fIN\fR" 4
.IX Item "-minit-stack=N"
Specify the initial stack address, which may be a symbol or numeric value,
\&\fB_\|_stack\fR is the default.
! .Ip "\fB\-mno-interrupts\fR" 4
.IX Item "-mno-interrupts"
Generated code is not compatible with hardware interrupts.
Code size will be smaller.
! .Ip "\fB\-mcall-prologues\fR" 4
.IX Item "-mcall-prologues"
Functions prologues/epilogues expanded as call to appropriate
subroutines. Code size will be smaller.
! .Ip "\fB\-mno-tablejump\fR" 4
.IX Item "-mno-tablejump"
Do not generate tablejump insns which sometimes increase code size.
! .Ip "\fB\-mtiny-stack\fR" 4
.IX Item "-mtiny-stack"
Change only the low 8 bits of the stack pointer.
.PP
! .I "MCore Options"
.IX Subsection "MCore Options"
.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 int-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 four 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.
.PP
! .I "\s-1IA-64\s0 Options"
.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 \s-1HP-UX\s0.
! .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 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\s0 \s-1ABI\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\-mb-step\fR" 4
.IX Item "-mb-step"
Generate code that works around Itanium B step errata.
! .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\-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-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-1DWARF2\s0 line number debugging
info. This may be useful when not using the \s-1GNU\s0 assembler.
! .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 can not use. This is
--- 8779,8965 ----
Instruction set avr5 is for the enhanced \s-1AVR\s0 core with up to 128K program
memory space (\s-1MCU\s0 types: atmega16, atmega161, atmega163, atmega32, atmega323,
atmega64, atmega128, at43usb355, at94k).
! .IP "\fB\-msize\fR" 4
.IX Item "-msize"
Output instruction sizes to the asm file.
! .IP "\fB\-minit\-stack=\fR\fIN\fR" 4
.IX Item "-minit-stack=N"
Specify the initial stack address, which may be a symbol or numeric value,
\&\fB_\|_stack\fR is the default.
! .IP "\fB\-mno\-interrupts\fR" 4
.IX Item "-mno-interrupts"
Generated code is not compatible with hardware interrupts.
Code size will be smaller.
! .IP "\fB\-mcall\-prologues\fR" 4
.IX Item "-mcall-prologues"
Functions prologues/epilogues expanded as call to appropriate
subroutines. Code size will be smaller.
! .IP "\fB\-mno\-tablejump\fR" 4
.IX Item "-mno-tablejump"
Do not generate tablejump insns which sometimes increase code size.
! .IP "\fB\-mtiny\-stack\fR" 4
.IX Item "-mtiny-stack"
Change only the low 8 bits of the stack pointer.
.PP
! \fIMCore Options\fR
.IX Subsection "MCore Options"
.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 int\-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 four 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.
.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 \s-1HP\-UX\s0.
! .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 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\s0 \s-1ABI\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\-mb\-step\fR" 4
.IX Item "-mb-step"
Generate code that works around Itanium B step errata.
! .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\-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\-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-1DWARF2\s0 line number debugging
info. This may be useful when not using the \s-1GNU\s0 assembler.
! .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 can not use. This is
*************** useful when compiling kernel code. A re
*** 8944,9015 ****
two registers separated by a dash. Multiple register ranges can be
specified separated by a comma.
.PP
! .I "D30V Options"
.IX Subsection "D30V Options"
.PP
These \fB\-m\fR options are defined for D30V implementations:
! .Ip "\fB\-mextmem\fR" 4
.IX Item "-mextmem"
Link the \fB.text\fR, \fB.data\fR, \fB.bss\fR, \fB.strings\fR,
\&\fB.rodata\fR, \fB.rodata1\fR, \fB.data1\fR sections into external
! memory, which starts at location \f(CW\*(C`0x80000000\*(C'\fR.
! .Ip "\fB\-mextmemory\fR" 4
.IX Item "-mextmemory"
Same as the \fB\-mextmem\fR switch.
! .Ip "\fB\-monchip\fR" 4
.IX Item "-monchip"
Link the \fB.text\fR section into onchip text memory, which starts at
! location \f(CW\*(C`0x0\*(C'\fR. Also link \fB.data\fR, \fB.bss\fR,
\&\fB.strings\fR, \fB.rodata\fR, \fB.rodata1\fR, \fB.data1\fR sections
! into onchip data memory, which starts at location \f(CW\*(C`0x20000000\*(C'\fR.
! .Ip "\fB\-mno-asm-optimize\fR" 4
.IX Item "-mno-asm-optimize"
.PD 0
! .Ip "\fB\-masm-optimize\fR" 4
.IX Item "-masm-optimize"
.PD
Disable (enable) passing \fB\-O\fR to the assembler when optimizing.
The assembler uses the \fB\-O\fR option to automatically parallelize
adjacent short instructions where possible.
! .Ip "\fB\-mbranch-cost=\fR\fIn\fR" 4
.IX Item "-mbranch-cost=n"
Increase the internal costs of branches to \fIn\fR. Higher costs means
that the compiler will issue more instructions to avoid doing a branch.
The default is 2.
! .Ip "\fB\-mcond-exec=\fR\fIn\fR" 4
.IX Item "-mcond-exec=n"
Specify the maximum number of conditionally executed instructions that
replace a branch. The default is 4.
.PP
! .I "S/390 and zSeries Options"
.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 will be 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\-mbackchain\fR" 4
.IX Item "-mbackchain"
.PD 0
! .Ip "\fB\-mno-backchain\fR" 4
.IX Item "-mno-backchain"
.PD
Generate (or do not generate) code which maintains an explicit
backchain within the stack frame that points to the caller's frame.
This is currently needed to allow debugging. The default is to
generate the backchain.
! .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
--- 8967,9038 ----
two registers separated by a dash. Multiple register ranges can be
specified separated by a comma.
.PP
! \fID30V Options\fR
.IX Subsection "D30V Options"
.PP
These \fB\-m\fR options are defined for D30V implementations:
! .IP "\fB\-mextmem\fR" 4
.IX Item "-mextmem"
Link the \fB.text\fR, \fB.data\fR, \fB.bss\fR, \fB.strings\fR,
\&\fB.rodata\fR, \fB.rodata1\fR, \fB.data1\fR sections into external
! memory, which starts at location \f(CW0x80000000\fR.
! .IP "\fB\-mextmemory\fR" 4
.IX Item "-mextmemory"
Same as the \fB\-mextmem\fR switch.
! .IP "\fB\-monchip\fR" 4
.IX Item "-monchip"
Link the \fB.text\fR section into onchip text memory, which starts at
! location \f(CW0x0\fR. Also link \fB.data\fR, \fB.bss\fR,
\&\fB.strings\fR, \fB.rodata\fR, \fB.rodata1\fR, \fB.data1\fR sections
! into onchip data memory, which starts at location \f(CW0x20000000\fR.
! .IP "\fB\-mno\-asm\-optimize\fR" 4
.IX Item "-mno-asm-optimize"
.PD 0
! .IP "\fB\-masm\-optimize\fR" 4
.IX Item "-masm-optimize"
.PD
Disable (enable) passing \fB\-O\fR to the assembler when optimizing.
The assembler uses the \fB\-O\fR option to automatically parallelize
adjacent short instructions where possible.
! .IP "\fB\-mbranch\-cost=\fR\fIn\fR" 4
.IX Item "-mbranch-cost=n"
Increase the internal costs of branches to \fIn\fR. Higher costs means
that the compiler will issue more instructions to avoid doing a branch.
The default is 2.
! .IP "\fB\-mcond\-exec=\fR\fIn\fR" 4
.IX Item "-mcond-exec=n"
Specify the maximum number of conditionally executed instructions that
replace a branch. The default is 4.
.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 will be 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\-mbackchain\fR" 4
.IX Item "-mbackchain"
.PD 0
! .IP "\fB\-mno\-backchain\fR" 4
.IX Item "-mno-backchain"
.PD
Generate (or do not generate) code which maintains an explicit
backchain within the stack frame that points to the caller's frame.
This is currently needed to allow debugging. The default is to
generate the backchain.
! .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.
*** 9017,9026 ****
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
--- 9040,9049 ----
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
*************** code compliant to the Linux for zSeries
*** 9029,9260 ****
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\-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.
! .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.
.PP
! .I "\s-1CRIS\s0 Options"
.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 except for cris-axis-linux-gnu, where the default is
\&\fBv10\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\-melinux-stacksize=\fR\fIn\fR" 4
.IX Item "-melinux-stacksize=n"
Only available with the \fBcris-axis-aout\fR target. Arranges for
indications in the program to the kernel loader that the stack of the
program should be set to \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 active 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 to turn 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 (no-options) arranges (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 that sets 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 variable needs to be allocated.
! .Ip "\fB\-mno-gotplt\fR" 4
.IX Item "-mno-gotplt"
.PD 0
! .Ip "\fB\-mgotplt\fR" 4
.IX Item "-mgotplt"
.PD
With \fB\-fpic\fR and \fB\-fPIC\fR, don't generate (do generate)
instruction sequences that load addresses for functions from the \s-1PLT\s0 part
of the \s-1GOT\s0 rather than (traditional on other architectures) calls to the
\&\s-1PLT\s0. The default is \fB\-mgotplt\fR.
! .Ip "\fB\-maout\fR" 4
.IX Item "-maout"
Legacy no-op option only recognized with the cris-axis-aout target.
! .Ip "\fB\-melf\fR" 4
.IX Item "-melf"
Legacy no-op option only recognized with the cris-axis-elf and
cris-axis-linux-gnu targets.
! .Ip "\fB\-melinux\fR" 4
.IX Item "-melinux"
Only recognized with the cris-axis-aout target, where it selects a
! GNU/linux-like multilib, include files and instruction set for
\&\fB\-march=v8\fR.
! .Ip "\fB\-mlinux\fR" 4
.IX Item "-mlinux"
Legacy no-op option only recognized with the cris-axis-linux-gnu target.
! .Ip "\fB\-sim\fR" 4
.IX Item "-sim"
This option, recognized for the cris-axis-aout and cris-axis-elf 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
! .I "\s-1MMIX\s0 Options"
.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\*(C`$0\*(C'\fR and up, as opposed to
! the \s-1GNU\s0 \s-1ABI\s0 which uses global registers \f(CW\*(C`$231\*(C'\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
--- 9052,9283 ----
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\-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.
! .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.
.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 except for cris\-axis\-linux\-gnu, where the default is
\&\fBv10\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\-melinux\-stacksize=\fR\fIn\fR" 4
.IX Item "-melinux-stacksize=n"
Only available with the \fBcris-axis-aout\fR target. Arranges for
indications in the program to the kernel loader that the stack of the
program should be set to \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 active 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 to turn 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 (no\-options) arranges (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 that sets 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 variable needs to be allocated.
! .IP "\fB\-mno\-gotplt\fR" 4
.IX Item "-mno-gotplt"
.PD 0
! .IP "\fB\-mgotplt\fR" 4
.IX Item "-mgotplt"
.PD
With \fB\-fpic\fR and \fB\-fPIC\fR, don't generate (do generate)
instruction sequences that load addresses for functions from the \s-1PLT\s0 part
of the \s-1GOT\s0 rather than (traditional on other architectures) calls to the
\&\s-1PLT\s0. The default is \fB\-mgotplt\fR.
! .IP "\fB\-maout\fR" 4
.IX Item "-maout"
Legacy no-op option only recognized with the cris-axis-aout target.
! .IP "\fB\-melf\fR" 4
.IX Item "-melf"
Legacy no-op option only recognized with the cris-axis-elf and
cris-axis-linux-gnu targets.
! .IP "\fB\-melinux\fR" 4
.IX Item "-melinux"
Only recognized with the cris-axis-aout target, where it selects a
! GNU/linux\-like multilib, include files and instruction set for
\&\fB\-march=v8\fR.
! .IP "\fB\-mlinux\fR" 4
.IX Item "-mlinux"
Legacy no-op option only recognized with the cris-axis-linux-gnu target.
! .IP "\fB\-sim\fR" 4
.IX Item "-sim"
This option, recognized for the cris-axis-aout and cris-axis-elf 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
! \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\s0 \s-1ABI\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
*************** register is used for one or more base ad
*** 9264,9528 ****
to 255 from the value held in the 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 \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
! .I "\s-1PDP-11\s0 Options"
.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.)
! .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.
! .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.
! .Ip "\fB\-mbcopy-builtin\fR" 4
.IX Item "-mbcopy-builtin"
Use inline \f(CW\*(C`movstrhi\*(C'\fR patterns for copying memory. This is the
default.
! .Ip "\fB\-mbcopy\fR" 4
.IX Item "-mbcopy"
Do not use inline \f(CW\*(C`movstrhi\*(C'\fR patterns for copying memory.
! .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\-mfloat64\fR" 4
.IX Item "-mfloat64"
.PD 0
! .Ip "\fB\-mno-float32\fR" 4
.IX Item "-mno-float32"
.PD
Use 64\-bit \f(CW\*(C`float\*(C'\fR. This is the default.
! .Ip "\fB\-mfloat32\fR" 4
.IX Item "-mfloat32"
.PD 0
! .Ip "\fB\-mno-float64\fR" 4
.IX Item "-mno-float64"
.PD
Use 32\-bit \f(CW\*(C`float\*(C'\fR.
! .Ip "\fB\-mabshi\fR" 4
.IX Item "-mabshi"
Use \f(CW\*(C`abshi2\*(C'\fR pattern. This is the default.
! .Ip "\fB\-mno-abshi\fR" 4
.IX Item "-mno-abshi"
Do not use \f(CW\*(C`abshi2\*(C'\fR pattern.
! .Ip "\fB\-mbranch-expensive\fR" 4
.IX Item "-mbranch-expensive"
Pretend that branches are expensive. This is for experimenting with
code generation only.
! .Ip "\fB\-mbranch-cheap\fR" 4
.IX Item "-mbranch-cheap"
Do not pretend that branches are expensive. This is the default.
! .Ip "\fB\-msplit\fR" 4
.IX Item "-msplit"
Generate code for a system with split I&D.
! .Ip "\fB\-mno-split\fR" 4
.IX Item "-mno-split"
Generate code for a system without split I&D. This is the default.
! .Ip "\fB\-munix-asm\fR" 4
.IX Item "-munix-asm"
Use Unix assembler syntax. This is the default when configured for
\&\fBpdp11\-*\-bsd\fR.
! .Ip "\fB\-mdec-asm\fR" 4
.IX Item "-mdec-asm"
Use \s-1DEC\s0 assembler syntax. This is the default when configured for any
! \&\s-1PDP-11\s0 target other than \fBpdp11\-*\-bsd\fR.
.PP
! .I "Xstormy16 Options"
.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
! .I "\s-1FRV\s0 Options"
.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\-mlibrary-pic\fR" 4
.IX Item "-mlibrary-pic"
Enable \s-1PIC\s0 support for building libraries
! .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\-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
\&\fBsimple\fR, \fBtomcat\fR, \fBfr500\fR, \fBfr400\fR, \fBfr300\fR,
\&\fBfrv\fR.
.PP
! .I "Xtensa Options"
.IX Subsection "Xtensa Options"
.PP
The Xtensa architecture is designed to support many different
--- 9287,9551 ----
to 255 from the value held in the 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 \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-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.)
! .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.
! .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.
! .IP "\fB\-mbcopy\-builtin\fR" 4
.IX Item "-mbcopy-builtin"
Use inline \f(CW\*(C`movstrhi\*(C'\fR patterns for copying memory. This is the
default.
! .IP "\fB\-mbcopy\fR" 4
.IX Item "-mbcopy"
Do not use inline \f(CW\*(C`movstrhi\*(C'\fR patterns for copying memory.
! .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\-mfloat64\fR" 4
.IX Item "-mfloat64"
.PD 0
! .IP "\fB\-mno\-float32\fR" 4
.IX Item "-mno-float32"
.PD
Use 64\-bit \f(CW\*(C`float\*(C'\fR. This is the default.
! .IP "\fB\-mfloat32\fR" 4
.IX Item "-mfloat32"
.PD 0
! .IP "\fB\-mno\-float64\fR" 4
.IX Item "-mno-float64"
.PD
Use 32\-bit \f(CW\*(C`float\*(C'\fR.
! .IP "\fB\-mabshi\fR" 4
.IX Item "-mabshi"
Use \f(CW\*(C`abshi2\*(C'\fR pattern. This is the default.
! .IP "\fB\-mno\-abshi\fR" 4
.IX Item "-mno-abshi"
Do not use \f(CW\*(C`abshi2\*(C'\fR pattern.
! .IP "\fB\-mbranch\-expensive\fR" 4
.IX Item "-mbranch-expensive"
Pretend that branches are expensive. This is for experimenting with
code generation only.
! .IP "\fB\-mbranch\-cheap\fR" 4
.IX Item "-mbranch-cheap"
Do not pretend that branches are expensive. This is the default.
! .IP "\fB\-msplit\fR" 4
.IX Item "-msplit"
Generate code for a system with split I&D.
! .IP "\fB\-mno\-split\fR" 4
.IX Item "-mno-split"
Generate code for a system without split I&D. This is the default.
! .IP "\fB\-munix\-asm\fR" 4
.IX Item "-munix-asm"
Use Unix assembler syntax. This is the default when configured for
\&\fBpdp11\-*\-bsd\fR.
! .IP "\fB\-mdec\-asm\fR" 4
.IX Item "-mdec-asm"
Use \s-1DEC\s0 assembler syntax. This is the default when configured for any
! \&\s-1PDP\-11\s0 target other than \fBpdp11\-*\-bsd\fR.
.PP
! \fIXstormy16 Options\fR
.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
! \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\-mlibrary\-pic\fR" 4
.IX Item "-mlibrary-pic"
Enable \s-1PIC\s0 support for building libraries
! .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\-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
\&\fBsimple\fR, \fBtomcat\fR, \fBfr500\fR, \fBfr400\fR, \fBfr300\fR,
\&\fBfrv\fR.
.PP
! \fIXtensa Options\fR
.IX Subsection "Xtensa Options"
.PP
The Xtensa architecture is designed to support many different
*************** configurations. The compiler's default
*** 9530,9554 ****
particular Xtensa configuration by copying a configuration file into the
\&\s-1GCC\s0 sources when building \s-1GCC\s0. The options below may be used to
override the default options.
! .Ip "\fB\-mbig-endian\fR" 4
.IX Item "-mbig-endian"
.PD 0
! .Ip "\fB\-mlittle-endian\fR" 4
.IX Item "-mlittle-endian"
.PD
Specify big-endian or little-endian byte ordering for the target Xtensa
processor.
! .Ip "\fB\-mdensity\fR" 4
.IX Item "-mdensity"
.PD 0
! .Ip "\fB\-mno-density\fR" 4
.IX Item "-mno-density"
.PD
Enable or disable use of the optional Xtensa code density instructions.
! .Ip "\fB\-mmac16\fR" 4
.IX Item "-mmac16"
.PD 0
! .Ip "\fB\-mno-mac16\fR" 4
.IX Item "-mno-mac16"
.PD
Enable or disable use of the Xtensa \s-1MAC16\s0 option. When enabled, \s-1GCC\s0
--- 9553,9577 ----
particular Xtensa configuration by copying a configuration file into the
\&\s-1GCC\s0 sources when building \s-1GCC\s0. The options below may be used to
override the default options.
! .IP "\fB\-mbig\-endian\fR" 4
.IX Item "-mbig-endian"
.PD 0
! .IP "\fB\-mlittle\-endian\fR" 4
.IX Item "-mlittle-endian"
.PD
Specify big-endian or little-endian byte ordering for the target Xtensa
processor.
! .IP "\fB\-mdensity\fR" 4
.IX Item "-mdensity"
.PD 0
! .IP "\fB\-mno\-density\fR" 4
.IX Item "-mno-density"
.PD
Enable or disable use of the optional Xtensa code density instructions.
! .IP "\fB\-mmac16\fR" 4
.IX Item "-mmac16"
.PD 0
! .IP "\fB\-mno\-mac16\fR" 4
.IX Item "-mno-mac16"
.PD
Enable or disable use of the Xtensa \s-1MAC16\s0 option. When enabled, \s-1GCC\s0
*************** instruction that operates on the \s-1MR\
*** 9558,9567 ****
disabled, \s-1GCC\s0 will translate 16\-bit multiply/accumulate operations to a
combination of core instructions and library calls, depending on whether
any other multiplier options are enabled.
! .Ip "\fB\-mmul16\fR" 4
.IX Item "-mmul16"
.PD 0
! .Ip "\fB\-mno-mul16\fR" 4
.IX Item "-mno-mul16"
.PD
Enable or disable use of the 16\-bit integer multiplier option. When
--- 9581,9590 ----
disabled, \s-1GCC\s0 will translate 16\-bit multiply/accumulate operations to a
combination of core instructions and library calls, depending on whether
any other multiplier options are enabled.
! .IP "\fB\-mmul16\fR" 4
.IX Item "-mmul16"
.PD 0
! .IP "\fB\-mno\-mul16\fR" 4
.IX Item "-mno-mul16"
.PD
Enable or disable use of the 16\-bit integer multiplier option. When
*************** multiplications of 16 bits or smaller in
*** 9570,9579 ****
option is disabled, the compiler will either use 32\-bit multiply or
\&\s-1MAC16\s0 instructions if they are available or generate library calls to
perform the multiply operations using shifts and adds.
! .Ip "\fB\-mmul32\fR" 4
.IX Item "-mmul32"
.PD 0
! .Ip "\fB\-mno-mul32\fR" 4
.IX Item "-mno-mul32"
.PD
Enable or disable use of the 32\-bit integer multiplier option. When
--- 9593,9602 ----
option is disabled, the compiler will either use 32\-bit multiply or
\&\s-1MAC16\s0 instructions if they are available or generate library calls to
perform the multiply operations using shifts and adds.
! .IP "\fB\-mmul32\fR" 4
.IX Item "-mmul32"
.PD 0
! .IP "\fB\-mno\-mul32\fR" 4
.IX Item "-mno-mul32"
.PD
Enable or disable use of the 32\-bit integer multiplier option. When
*************** multiplications of 32 bits or smaller in
*** 9582,9625 ****
option is disabled, the compiler will generate library calls to perform
the multiply operations using either shifts and adds or 16\-bit multiply
instructions if they are available.
! .Ip "\fB\-mnsa\fR" 4
.IX Item "-mnsa"
.PD 0
! .Ip "\fB\-mno-nsa\fR" 4
.IX Item "-mno-nsa"
.PD
Enable or disable use of the optional normalization shift amount
(\f(CW\*(C`NSA\*(C'\fR) instructions to implement the built-in \f(CW\*(C`ffs\*(C'\fR function.
! .Ip "\fB\-mminmax\fR" 4
.IX Item "-mminmax"
.PD 0
! .Ip "\fB\-mno-minmax\fR" 4
.IX Item "-mno-minmax"
.PD
Enable or disable use of the optional minimum and maximum value
instructions.
! .Ip "\fB\-msext\fR" 4
.IX Item "-msext"
.PD 0
! .Ip "\fB\-mno-sext\fR" 4
.IX Item "-mno-sext"
.PD
Enable or disable use of the optional sign extend (\f(CW\*(C`SEXT\*(C'\fR)
instruction.
! .Ip "\fB\-mbooleans\fR" 4
.IX Item "-mbooleans"
.PD 0
! .Ip "\fB\-mno-booleans\fR" 4
.IX Item "-mno-booleans"
.PD
Enable or disable support for the boolean register file used by Xtensa
coprocessors. This is not typically useful by itself but may be
required for other options that make use of the boolean registers (e.g.,
the floating-point option).
! .Ip "\fB\-mhard-float\fR" 4
.IX Item "-mhard-float"
.PD 0
! .Ip "\fB\-msoft-float\fR" 4
.IX Item "-msoft-float"
.PD
Enable or disable use of the floating-point option. When enabled, \s-1GCC\s0
--- 9605,9648 ----
option is disabled, the compiler will generate library calls to perform
the multiply operations using either shifts and adds or 16\-bit multiply
instructions if they are available.
! .IP "\fB\-mnsa\fR" 4
.IX Item "-mnsa"
.PD 0
! .IP "\fB\-mno\-nsa\fR" 4
.IX Item "-mno-nsa"
.PD
Enable or disable use of the optional normalization shift amount
(\f(CW\*(C`NSA\*(C'\fR) instructions to implement the built-in \f(CW\*(C`ffs\*(C'\fR function.
! .IP "\fB\-mminmax\fR" 4
.IX Item "-mminmax"
.PD 0
! .IP "\fB\-mno\-minmax\fR" 4
.IX Item "-mno-minmax"
.PD
Enable or disable use of the optional minimum and maximum value
instructions.
! .IP "\fB\-msext\fR" 4
.IX Item "-msext"
.PD 0
! .IP "\fB\-mno\-sext\fR" 4
.IX Item "-mno-sext"
.PD
Enable or disable use of the optional sign extend (\f(CW\*(C`SEXT\*(C'\fR)
instruction.
! .IP "\fB\-mbooleans\fR" 4
.IX Item "-mbooleans"
.PD 0
! .IP "\fB\-mno\-booleans\fR" 4
.IX Item "-mno-booleans"
.PD
Enable or disable support for the boolean register file used by Xtensa
coprocessors. This is not typically useful by itself but may be
required for other options that make use of the boolean registers (e.g.,
the floating-point option).
! .IP "\fB\-mhard\-float\fR" 4
.IX Item "-mhard-float"
.PD 0
! .IP "\fB\-msoft\-float\fR" 4
.IX Item "-msoft-float"
.PD
Enable or disable use of the floating-point option. When enabled, \s-1GCC\s0
*************** operations. When this option is disable
*** 9628,9637 ****
to emulate 32\-bit floating-point operations using integer instructions.
Regardless of this option, 64\-bit \f(CW\*(C`double\*(C'\fR operations are always
emulated with calls to library functions.
! .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
--- 9651,9660 ----
to emulate 32\-bit floating-point operations using integer instructions.
Regardless of this option, 64\-bit \f(CW\*(C`double\*(C'\fR operations are always
emulated with calls to library functions.
! .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
*************** precision than specified by the \s-1IEEE
*** 9646,9680 ****
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\-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
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.
! .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
--- 9669,9703 ----
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\-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
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.
! .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
*************** expense of some code density. The assem
*** 9683,9696 ****
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 will be 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 will always align, either by widening density instructions or
by inserting no-op 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
--- 9706,9719 ----
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 will be 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 will always align, either by widening density instructions or
by inserting no-op 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
*************** of a direct call is in the range allowed
*** 9699,9705 ****
translation typically occurs for calls to functions in other source
files. Specifically, the assembler translates a direct \f(CW\*(C`CALL\*(C'\fR
instruction into an \f(CW\*(C`L32R\*(C'\fR followed by a \f(CW\*(C`CALLX\*(C'\fR instruction.
! 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 will still show direct call
--- 9722,9728 ----
translation typically occurs for calls to functions in other source
files. Specifically, the assembler translates a direct \f(CW\*(C`CALL\*(C'\fR
instruction into an \f(CW\*(C`L32R\*(C'\fR followed by a \f(CW\*(C`CALLX\*(C'\fR instruction.
! 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 will still show direct call
*************** These machine-independent options contro
*** 9712,9732 ****
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\fR. 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 \fBno-\fR or adding
it.
! .Ip "\fB\-fbounds-check\fR" 4
.IX Item "-fbounds-check"
For front-ends that support it, generate additional code to check that
indices used to access arrays are within the declared range. This is
! currently only supported by the Java and Fortran 77 front-ends, where
this option defaults to true and false respectively.
! .Ip "\fB\-ftrapv\fR" 4
.IX Item "-ftrapv"
This option generates traps for signed overflow on addition, subtraction,
multiplication operations.
! .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 will generate frame
--- 9735,9755 ----
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\fR. 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 \fBno\-\fR or adding
it.
! .IP "\fB\-fbounds\-check\fR" 4
.IX Item "-fbounds-check"
For front-ends that support it, generate additional code to check that
indices used to access arrays are within the declared range. This is
! currently only supported by the Java and Fortran 77 front\-ends, where
this option defaults to true and false respectively.
! .IP "\fB\-ftrapv\fR" 4
.IX Item "-ftrapv"
This option generates traps for signed overflow on addition, subtraction,
multiplication operations.
! .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 will generate frame
*************** to enable this option when compiling C c
*** 9739,9745 ****
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
--- 9762,9768 ----
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
*** 9747,9764 ****
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.
! .Ip "\fB\-funwind-tables\fR" 4
.IX Item "-funwind-tables"
Similar to \fB\-fexceptions\fR, except that it will just generate any needed
static data, but will not affect the generated code in any other way.
You will normally not enable this option; instead, a language processor
that needs this handling would enable it on your behalf.
! .Ip "\fB\-fasynchronous-unwind-tables\fR" 4
.IX Item "-fasynchronous-unwind-tables"
Generate unwind table in dwarf2 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\-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
--- 9770,9787 ----
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.
! .IP "\fB\-funwind\-tables\fR" 4
.IX Item "-funwind-tables"
Similar to \fB\-fexceptions\fR, except that it will just generate any needed
static data, but will not affect the generated code in any other way.
You will normally not enable this option; instead, a language processor
that needs this handling would enable it on your behalf.
! .IP "\fB\-fasynchronous\-unwind\-tables\fR" 4
.IX Item "-fasynchronous-unwind-tables"
Generate unwind table in dwarf2 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\-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
*************** on the target configuration macros.
*** 9772,9831 ****
Short structures and unions are those whose size and alignment match
that of some integer type.
.Sp
! \&\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
will be equivalent to the smallest integer type which has enough room.
.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-double\fR" 4
.IX Item "-fshort-double"
Use the same size for \f(CW\*(C`double\*(C'\fR as for \f(CW\*(C`float\*(C'\fR.
.Sp
! \&\fBWarning:\fR the \fB\-fshort-double\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 \fBwchar_t\fR to be \fBshort
unsigned int\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\-fshared-data\fR" 4
.IX Item "-fshared-data"
! Requests that the data and non-\f(CW\*(C`const\*(C'\fR variables of this
compilation be shared data rather than private data. The distinction
makes sense only on certain operating systems, where shared data is
shared between processes running the same program, while private data
exists in one copy per process.
! .Ip "\fB\-fno-common\fR" 4
.IX Item "-fno-common"
In C, allocate even uninitialized global variables in the data section of the
object file, rather than generating them as common blocks. This has the
--- 9795,9854 ----
Short structures and unions are those whose size and alignment match
that of some integer type.
.Sp
! \&\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
will be equivalent to the smallest integer type which has enough room.
.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\-double\fR" 4
.IX Item "-fshort-double"
Use the same size for \f(CW\*(C`double\*(C'\fR as for \f(CW\*(C`float\*(C'\fR.
.Sp
! \&\fBWarning:\fR the \fB\-fshort\-double\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 \fBwchar_t\fR to be \fBshort
unsigned int\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\-fshared\-data\fR" 4
.IX Item "-fshared-data"
! Requests that the data and non\-\f(CW\*(C`const\*(C'\fR variables of this
compilation be shared data rather than private data. The distinction
makes sense only on certain operating systems, where shared data is
shared between processes running the same program, while private data
exists in one copy per process.
! .IP "\fB\-fno\-common\fR" 4
.IX Item "-fno-common"
In C, allocate even uninitialized global variables in the data section of the
object file, rather than generating them as common blocks. This has the
*************** effect that if the same variable is decl
*** 9833,9842 ****
two different compilations, you will get an error when you link them.
The only reason this might be useful is if you wish to verify that the
program will work on other systems which always work this way.
! .Ip "\fB\-fno-ident\fR" 4
.IX Item "-fno-ident"
Ignore the \fB#ident\fR directive.
! .Ip "\fB\-fno-gnu-linker\fR" 4
.IX Item "-fno-gnu-linker"
Do not output global initializations (such as \*(C+ constructors and
destructors) in the form used by the \s-1GNU\s0 linker (on systems where the \s-1GNU\s0
--- 9856,9865 ----
two different compilations, you will get an error when you link them.
The only reason this might be useful is if you wish to verify that the
program will work on other systems which always work this way.
! .IP "\fB\-fno\-ident\fR" 4
.IX Item "-fno-ident"
Ignore the \fB#ident\fR directive.
! .IP "\fB\-fno\-gnu\-linker\fR" 4
.IX Item "-fno-gnu-linker"
Do not output global initializations (such as \*(C+ constructors and
destructors) in the form used by the \s-1GNU\s0 linker (on systems where the \s-1GNU\s0
*************** you want to use a non-GNU linker, which
*** 9846,9880 ****
constructors and destructors. (\fBcollect2\fR is included in the \s-1GCC\s0
distribution.) For systems which \fImust\fR use \fBcollect2\fR, the
compiler driver \fBgcc\fR is configured to do this automatically.
! .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
who actually need to read the generated assembly code (perhaps while
debugging the compiler itself).
.Sp
! \&\fB\-fno-verbose-asm\fR, the default, causes the
extra information to be omitted and is useful when comparing two assembler
files.
! .Ip "\fB\-fvolatile\fR" 4
.IX Item "-fvolatile"
Consider all memory references through pointers to be volatile.
! .Ip "\fB\-fvolatile-global\fR" 4
.IX Item "-fvolatile-global"
Consider all memory references to extern and global data items to
be volatile. \s-1GCC\s0 does not consider static data items to be volatile
because of this switch.
! .Ip "\fB\-fvolatile-static\fR" 4
.IX Item "-fvolatile-static"
Consider all memory references to static data to be volatile.
! .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
--- 9869,9903 ----
constructors and destructors. (\fBcollect2\fR is included in the \s-1GCC\s0
distribution.) For systems which \fImust\fR use \fBcollect2\fR, the
compiler driver \fBgcc\fR is configured to do this automatically.
! .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
who actually need to read the generated assembly code (perhaps while
debugging the compiler itself).
.Sp
! \&\fB\-fno\-verbose\-asm\fR, the default, causes the
extra information to be omitted and is useful when comparing two assembler
files.
! .IP "\fB\-fvolatile\fR" 4
.IX Item "-fvolatile"
Consider all memory references through pointers to be volatile.
! .IP "\fB\-fvolatile\-global\fR" 4
.IX Item "-fvolatile-global"
Consider all memory references to extern and global data items to
be volatile. \s-1GCC\s0 does not consider static data items to be volatile
because of this switch.
! .IP "\fB\-fvolatile\-static\fR" 4
.IX Item "-fvolatile-static"
Consider all memory references to static data to be volatile.
! .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
*************** on the m68k and \s-1RS/6000\s0. The 386
*** 9890,9897 ****
Position-independent code requires special support, and therefore works
only on certain machines. For the 386, \s-1GCC\s0 supports \s-1PIC\s0 for System V
but not for the Sun 386i. Code generated for the \s-1IBM\s0 \s-1RS/6000\s0 is always
! position-independent.
! .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
--- 9913,9920 ----
Position-independent code requires special support, and therefore works
only on certain machines. For the 386, \s-1GCC\s0 supports \s-1PIC\s0 for System V
but not for the Sun 386i. Code generated for the \s-1IBM\s0 \s-1RS/6000\s0 is always
! position\-independent.
! .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
*************** and the \s-1SPARC\s0.
*** 9900,9906 ****
.Sp
Position-independent code requires special support, and therefore works
only on certain machines.
! .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
--- 9923,9929 ----
.Sp
Position-independent code requires special support, and therefore works
only on certain machines.
! .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
*************** macro in the machine description macro f
*** 9912,9918 ****
.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
--- 9935,9941 ----
.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
*************** the machine's execution model will produ
*** 9925,9931 ****
.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
--- 9948,9954 ----
.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
*************** a register in which function values may
*** 9941,9955 ****
.Sp
This flag does not have a negative form, because it specifies a
three-way choice.
! .Ip "\fB\-fpack-struct\fR" 4
.IX Item "-fpack-struct"
Pack all structure members together without holes.
.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\-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
--- 9964,9978 ----
.Sp
This flag does not have a negative form, because it specifies a
three-way choice.
! .IP "\fB\-fpack\-struct\fR" 4
.IX Item "-fpack-struct"
Pack all structure members together without holes.
.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\-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
*************** profiling functions otherwise.)
*** 9965,9970 ****
--- 9988,9994 ----
\& void __cyg_profile_func_exit (void *this_fn,
\& void *call_site);
.Ve
+ .Sp
The first argument is the address of the start of the current function,
which may be looked up exactly in the symbol table.
.Sp
*************** example, for the profiling functions lis
*** 9985,9991 ****
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\-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
--- 10009,10015 ----
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\-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
*************** detected on nearly all systems if there
*** 9996,10007 ****
Note that this switch does not actually cause checking to be done; the
operating system must do that. The switch causes generation of code
to ensure that the operating system sees the stack being extended.
! .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,
--- 10020,10031 ----
Note that this switch does not actually cause checking to be done; the
operating system must do that. The switch causes generation of code
to ensure that the operating system sees the stack being extended.
! .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,
*************** it is possible to catch the signal witho
*** 10012,10049 ****
.Sp
For instance, if the stack starts at absolute address \fB0x80000000\fR
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.
! .Ip "\fB\-fargument-alias\fR" 4
.IX Item "-fargument-alias"
.PD 0
! .Ip "\fB\-fargument-noalias\fR" 4
.IX Item "-fargument-noalias"
! .Ip "\fB\-fargument-noalias-global\fR" 4
.IX Item "-fargument-noalias-global"
.PD
Specify the possible relationships among parameters and between
parameters and global data.
.Sp
! \&\fB\-fargument-alias\fR specifies that arguments (parameters) may
! alias each other and may alias global storage.\fB\-fargument-noalias\fR specifies that arguments do not alias
! each other, but may alias global storage.\fB\-fargument-noalias-global\fR specifies that arguments do not
alias each other and do not alias global storage.
.Sp
Each language will automatically use whatever option is required by
the language standard. You should not need to use these options yourself.
! .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 \f(CW\*(C`global\-dynamic\*(C'\fR,
--- 10036,10073 ----
.Sp
For instance, if the stack starts at absolute address \fB0x80000000\fR
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.
! .IP "\fB\-fargument\-alias\fR" 4
.IX Item "-fargument-alias"
.PD 0
! .IP "\fB\-fargument\-noalias\fR" 4
.IX Item "-fargument-noalias"
! .IP "\fB\-fargument\-noalias\-global\fR" 4
.IX Item "-fargument-noalias-global"
.PD
Specify the possible relationships among parameters and between
parameters and global data.
.Sp
! \&\fB\-fargument\-alias\fR specifies that arguments (parameters) may
! alias each other and may alias global storage.\fB\-fargument\-noalias\fR specifies that arguments do not alias
! each other, but may alias global storage.\fB\-fargument\-noalias\-global\fR specifies that arguments do not
alias each other and do not alias global storage.
.Sp
Each language will automatically use whatever option is required by
the language standard. You should not need to use these options yourself.
! .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 \f(CW\*(C`global\-dynamic\*(C'\fR,
*************** Note that you can also specify places to
*** 10062,10075 ****
\&\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
--- 10086,10099 ----
\&\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
*************** of \fB\s-1LC_CTYPE\s0\fR and \fB\s-1LC_M
*** 10094,10107 ****
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_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
--- 10118,10131 ----
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_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
*************** If \s-1GCC\s0 cannot find the subprogram
*** 10115,10121 ****
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-lib/\fR where \fIprefix\fR is the value
of \f(CW\*(C`prefix\*(C'\fR when you ran the \fIconfigure\fR script.
.Sp
Other prefixes specified with \fB\-B\fR take precedence over this prefix.
--- 10139,10145 ----
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\-lib/\fR where \fIprefix\fR is the value
of \f(CW\*(C`prefix\*(C'\fR when you ran the \fIconfigure\fR script.
.Sp
Other prefixes specified with \fB\-B\fR take precedence over this prefix.
*************** used for linking.
*** 10125,10144 ****
.Sp
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-lib\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 will search
\&\fIfoo/bar\fR where it would normally search \fI/usr/local/lib/bar\fR.
These alternate directories are searched first; the standard directories
come next.
! .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 can't 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,
--- 10149,10168 ----
.Sp
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\-lib\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 will search
\&\fIfoo/bar\fR where it would normally search \fI/usr/local/lib/bar\fR.
These alternate directories are searched first; the standard directories
come next.
! .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 can't 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,
*************** linker files, if it can't find them usin
*** 10147,10153 ****
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
--- 10171,10177 ----
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
*** 10155,10167 ****
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
--- 10179,10191 ----
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
*************** recognize and translate multibyte charac
*** 10174,10187 ****
.PP
Some additional environments 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
--- 10198,10211 ----
.PP
Some additional environments 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
*************** search its current working directory. E
*** 10205,10211 ****
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
--- 10229,10235 ----
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
*************** file \fIfile\fR using \fItarget\fR as th
*** 10221,10227 ****
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
--- 10245,10251 ----
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
*************** For instructions on reporting bugs, see
*** 10234,10240 ****
script to report bugs is recommended.
.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
--- 10258,10264 ----
script to report bugs is recommended.
.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
*************** to subtle defects. Supplying them in ca
*** 10243,10249 ****
is innocuous.
.SH "SEE ALSO"
.IX Header "SEE ALSO"
! \&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf-funding\fR\|(7),
\&\fIcpp\fR\|(1), \fIgcov\fR\|(1), \fIg77\fR\|(1), \fIas\fR\|(1), \fIld\fR\|(1), \fIgdb\fR\|(1), \fIadb\fR\|(1), \fIdbx\fR\|(1), \fIsdb\fR\|(1)
and the Info entries for \fIgcc\fR, \fIcpp\fR, \fIg77\fR, \fIas\fR,
\&\fIld\fR, \fIbinutils\fR and \fIgdb\fR.
--- 10267,10273 ----
is innocuous.
.SH "SEE ALSO"
.IX Header "SEE ALSO"
! \&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf\-funding\fR\|(7),
\&\fIcpp\fR\|(1), \fIgcov\fR\|(1), \fIg77\fR\|(1), \fIas\fR\|(1), \fIld\fR\|(1), \fIgdb\fR\|(1), \fIadb\fR\|(1), \fIdbx\fR\|(1), \fIsdb\fR\|(1)
and the Info entries for \fIgcc\fR, \fIcpp\fR, \fIg77\fR, \fIas\fR,
\&\fIld\fR, \fIbinutils\fR and \fIgdb\fR.
*************** included in the \fIgfdl\fR\|(7) man page
*** 10270,10275 ****
--- 10294,10300 ----
.Vb 1
\& A GNU Manual
.Ve
+ .PP
(b) The \s-1FSF\s0's Back-Cover Text is:
.PP
.Vb 3
diff -Nrc3pad gcc-3.3.4/gcc/doc/gcc.info gcc-3.3.5/gcc/doc/gcc.info
*** gcc-3.3.4/gcc/doc/gcc.info 2004-05-31 22:43:08.000000000 +0000
--- gcc-3.3.5/gcc/doc/gcc.info 2004-09-30 17:38:12.000000000 +0000
***************
*** 1,5 ****
! Ceci est le fichier Info doc/gcc.info, produit par Makeinfo version 4.6
! à partir doc/gcc.texi.
Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
--- 1,5 ----
! This is doc/gcc.info, produced by makeinfo version 4.5 from
! doc/gcc.texi.
Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
*************** File: gcc.info, Node: Top, Next: G++ a
*** 58,66 ****
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 GCC version 3.3.4. 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.
--- 58,66 ----
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 GCC version 3.3.5. 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.
*************** File: gcc.info, Node: G++ and GCC, Nex
*** 98,104 ****
Compile C, C++, Objective-C, Ada, Fortran, Java, or treelang
************************************************************
! Several versions of the compiler (C, C++, Objective-C, Ada, Fortran,
Java and treelang) are integrated; this is why we use the name "GNU
Compiler Collection". GCC can compile programs written in any of these
languages. The Ada, Fortran, Java and treelang compilers are described
--- 98,104 ----
Compile C, C++, Objective-C, Ada, Fortran, Java, or treelang
************************************************************
! Several versions of the compiler (C, C++, Objective-C, Ada, Fortran,
Java and treelang) are integrated; this is why we use the name "GNU
Compiler Collection". GCC can compile programs written in any of these
languages. The Ada, Fortran, Java and treelang compilers are described
*************** File: gcc.info, Node: Standards, Next:
*** 150,156 ****
Language Standards Supported by GCC
***********************************
! For each language compiled by GCC for which there is a standard, GCC
attempts to follow one or more versions of that standard, possibly with
some exceptions, and possibly with some extensions.
--- 150,156 ----
Language Standards Supported by GCC
***********************************
! For each language compiled by GCC for which there is a standard, GCC
attempts to follow one or more versions of that standard, possibly with
some exceptions, and possibly with some extensions.
*************** File: gcc.info, Node: Invoking GCC, Ne
*** 289,295 ****
GCC Command Options
*******************
! 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
--- 289,295 ----
GCC Command Options
*******************
! 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
*************** File: gcc.info, Node: Option Summary,
*** 362,369 ****
Option Summary
==============
! Here is a summary of all the options, grouped by type. Explanations are
! in the following sections.
_Overall Options_
*Note Options Controlling the Kind of Output: Overall Options.
--- 362,369 ----
Option Summary
==============
! Here is a summary of all the options, grouped by type. Explanations
! are in the following sections.
_Overall Options_
*Note Options Controlling the Kind of Output: Overall Options.
*************** _Machine Dependent Options_
*** 562,567 ****
--- 562,568 ----
-mno-impure-text -mno-stack-bias -mno-unaligned-doubles
-msoft-float -msoft-quad-float -msparclite -mstack-bias
-msupersparc -munaligned-doubles -mv8
+ -threads -pthreads
_ARM Options_
-mapcs-frame -mno-apcs-frame
*************** File: gcc.info, Node: Overall Options,
*** 907,913 ****
Options Controlling the Kind of Output
======================================
! Compilation can involve up to four stages: preprocessing, compilation
proper, assembly and linking, always in that order. The first three
stages apply to an individual source file, and end by producing an
object file; linking combines all the object files (those newly
--- 908,914 ----
Options Controlling the Kind of Output
======================================
! Compilation can involve up to four stages: preprocessing, compilation
proper, assembly and linking, always in that order. The first three
stages apply to an individual source file, and end by producing an
object file; linking combines all the object files (those newly
*************** File: gcc.info, Node: Invoking G++, Ne
*** 1100,1106 ****
Compiling C++ Programs
======================
! C++ source files conventionally use one of the suffixes `.C', `.cc',
`.cpp', `.c++', `.cp', or `.cxx'; 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
--- 1101,1107 ----
Compiling C++ Programs
======================
! C++ source files conventionally use one of the suffixes `.C', `.cc',
`.cpp', `.c++', `.cp', or `.cxx'; 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
*************** File: gcc.info, Node: C Dialect Options
*** 1129,1135 ****
Options Controlling C Dialect
=============================
! The following options control the dialect of C (or languages derived
from C, such as C++ and Objective-C) that the compiler accepts:
`-ansi'
--- 1130,1136 ----
Options Controlling C Dialect
=============================
! The following options control the dialect of C (or languages derived
from C, such as C++ and Objective-C) that the compiler accepts:
`-ansi'
*************** File: gcc.info, Node: C++ Dialect Optio
*** 1372,1381 ****
Options Controlling C++ Dialect
===============================
! This section describes the command-line options that are only meaningful
! for C++ programs; but 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 -frepo -O -c firstClass.C
--- 1373,1382 ----
Options Controlling C++ Dialect
===============================
! This section describes the command-line options that are only
! meaningful for C++ programs; but 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 -frepo -O -c firstClass.C
*************** File: gcc.info, Node: Objective-C Diale
*** 1806,1815 ****
Options Controlling Objective-C Dialect
=======================================
! This section describes the command-line options that are only meaningful
! for Objective-C programs, but 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 `some_class.m' like this:
gcc -g -fgnu-runtime -O -c some_class.m
--- 1807,1816 ----
Options Controlling Objective-C Dialect
=======================================
! This section describes the command-line options that are only
! meaningful for Objective-C programs, but 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 `some_class.m' like this:
gcc -g -fgnu-runtime -O -c some_class.m
*************** File: gcc.info, Node: Language Independ
*** 1880,1892 ****
Options to Control Diagnostic Messages Formatting
=================================================
! Traditionally, diagnostic messages have been formatted irrespective of
! the output device's aspect (e.g. its width, ...). The options described
! below can be used to control the diagnostic messages formatting
! algorithm, e.g. how many characters per line, how often source location
! information should be reported. Right now, only the C++ front end can
! honor these options. However it is expected, in the near future, that
! the remaining front ends would be able to digest them correctly.
`-fmessage-length=N'
Try to format error messages so that they fit on lines of about N
--- 1881,1894 ----
Options to Control Diagnostic Messages Formatting
=================================================
! Traditionally, diagnostic messages have been formatted irrespective
! of the output device's aspect (e.g. its width, ...). The options
! described below can be used to control the diagnostic messages
! formatting algorithm, e.g. how many characters per line, how often
! source location information should be reported. Right now, only the
! C++ front end can honor these options. However it is expected, in the
! near future, that the remaining front ends would be able to digest them
! correctly.
`-fmessage-length=N'
Try to format error messages so that they fit on lines of about N
*************** File: gcc.info, Node: Warning Options,
*** 1916,1922 ****
Options to Request or Suppress Warnings
=======================================
! Warnings are diagnostic messages that report constructions which are
not inherently erroneous but which are risky or suggest there may have
been an error.
--- 1918,1924 ----
Options to Request or Suppress Warnings
=======================================
! Warnings are diagnostic messages that report constructions which are
not inherently erroneous but which are risky or suggest there may have
been an error.
*************** File: gcc.info, Node: Debugging Options
*** 2725,2732 ****
Options for Debugging Your Program or GCC
=========================================
! GCC has various special options that are used for debugging either your
! program or GCC:
`-g'
Produce debugging information in the operating system's native
--- 2727,2734 ----
Options for Debugging Your Program or GCC
=========================================
! GCC has various special options that are used for debugging either
! your program or GCC:
`-g'
Produce debugging information in the operating system's native
*************** File: gcc.info, Node: Optimize Options,
*** 3241,3247 ****
Options That Control Optimization
=================================
! These options control various sorts of optimizations.
Without any optimization option, the compiler's goal is to reduce the
cost of compilation and to make debugging produce the expected results.
--- 3243,3249 ----
Options That Control Optimization
=================================
! These options control various sorts of optimizations.
Without any optimization option, the compiler's goal is to reduce the
cost of compilation and to make debugging produce the expected results.
*************** optimizations to be performed is desired
*** 3745,3751 ****
`-fpeephole' is enabled by default. `-fpeephole2' enabled at
levels `-O2', `-O3', `-Os'.
- `-fbranch-probabilities'
`-fno-guess-branch-probability'
Do not guess branch probabilities using a randomized model.
--- 3747,3752 ----
*************** File: gcc.info, Node: Preprocessor Opti
*** 4290,4297 ****
Options Controlling the Preprocessor
====================================
! 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
--- 4291,4298 ----
Options Controlling the Preprocessor
====================================
! 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
*************** File: gcc.info, Node: Assembler Options
*** 4807,4813 ****
Passing Options to the Assembler
================================
! You can pass options to the assembler.
`-Wa,OPTION'
Pass OPTION as an option to the assembler. If OPTION contains
--- 4808,4814 ----
Passing Options to the Assembler
================================
! You can pass options to the assembler.
`-Wa,OPTION'
Pass OPTION as an option to the assembler. If OPTION contains
*************** File: gcc.info, Node: Link Options, Ne
*** 4819,4827 ****
Options for Linking
===================
! 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.
`OBJECT-FILE-NAME'
A file name that does not end in a special recognized suffix is
--- 4820,4828 ----
Options for Linking
===================
! 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.
`OBJECT-FILE-NAME'
A file name that does not end in a special recognized suffix is
*************** File: gcc.info, Node: Directory Options
*** 4999,5005 ****
Options for Directory Search
============================
! These options specify directories to search for header files, for
libraries and for parts of the compiler:
`-IDIR'
--- 5000,5006 ----
Options for Directory Search
============================
! These options specify directories to search for header files, for
libraries and for parts of the compiler:
`-IDIR'
*************** File: gcc.info, Node: Spec Files, Next
*** 5104,5115 ****
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
--- 5105,5116 ----
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
*************** File: gcc.info, Node: Target Options,
*** 5580,5586 ****
Specifying Target Machine and Compiler Version
==============================================
! The usual way to run GCC is to run the executable called `gcc', or
`-gcc' when cross-compiling, or `-gcc-' to
run a version other than the one that was installed last. Sometimes
this is inconvenient, so GCC provides options that will switch to
--- 5581,5587 ----
Specifying Target Machine and Compiler Version
==============================================
! The usual way to run GCC is to run the executable called `gcc', or
`-gcc' when cross-compiling, or `-gcc-' to
run a version other than the one that was installed last. Sometimes
this is inconvenient, so GCC provides options that will switch to
*************** File: gcc.info, Node: Submodel Options,
*** 5610,5616 ****
Hardware Models and Configurations
==================================
! Earlier we discussed the standard option `-b' which chooses among
different installed compilers for completely different target machines,
such as VAX vs. 68000 vs. 80386.
--- 5611,5617 ----
Hardware Models and Configurations
==================================
! Earlier we discussed the standard option `-b' which chooses among
different installed compilers for completely different target machines,
such as VAX vs. 68000 vs. 80386.
*************** File: gcc.info, Node: M680x0 Options,
*** 5674,5680 ****
M680x0 Options
--------------
! These are the `-m' options defined for the 68000 series. The default
values for these options depends on which style of 68000 was selected
when the compiler was configured; the defaults for the most common
choices are given below.
--- 5675,5681 ----
M680x0 Options
--------------
! These are the `-m' options defined for the 68000 series. The default
values for these options depends on which style of 68000 was selected
when the compiler was configured; the defaults for the most common
choices are given below.
*************** File: gcc.info, Node: M68hc1x Options,
*** 5826,5832 ****
M68hc1x Options
---------------
! These are the `-m' options defined for the 68hc11 and 68hc12
microcontrollers. The default values for these options depends on
which style of microcontroller was selected when the compiler was
configured; the defaults for the most common choices are given below.
--- 5827,5833 ----
M68hc1x Options
---------------
! These are the `-m' options defined for the 68hc11 and 68hc12
microcontrollers. The default values for these options depends on
which style of microcontroller was selected when the compiler was
configured; the defaults for the most common choices are given below.
*************** File: gcc.info, Node: VAX Options, Nex
*** 5875,5881 ****
VAX Options
-----------
! These `-m' options are defined for the VAX:
`-munix'
Do not output certain jump instructions (`aobleq' and so on) that
--- 5876,5882 ----
VAX Options
-----------
! These `-m' options are defined for the VAX:
`-munix'
Do not output certain jump instructions (`aobleq' and so on) that
*************** File: gcc.info, Node: SPARC Options, N
*** 5895,5901 ****
SPARC Options
-------------
! These `-m' switches are supported on the SPARC:
`-mno-app-regs'
`-mapp-regs'
--- 5896,5902 ----
SPARC Options
-------------
! These `-m' switches are supported on the SPARC:
`-mno-app-regs'
`-mapp-regs'
*************** V9 processors in 64-bit environments.
*** 6131,6143 ****
when making stack frame references. Otherwise, assume no such
offset is present.
File: gcc.info, Node: ARM Options, Next: MN10200 Options, Prev: SPARC Options, Up: Submodel Options
ARM Options
-----------
! These `-m' options are defined for Advanced RISC Machines (ARM)
architectures:
`-mapcs-frame'
--- 6132,6158 ----
when making stack frame references. Otherwise, assume no such
offset is present.
+ These switches are supported in addition to the above on Solaris:
+
+ `-threads'
+ Add support for multithreading using the Solaris threads library.
+ This option sets flags for both the preprocessor and linker. This
+ option does not affect the thread safety of object code produced
+ by the compiler or that of libraries supplied with it.
+
+ `-pthreads'
+ Add support for multithreading using the POSIX threads library.
+ This option sets flags for both the preprocessor and linker. This
+ option does not affect the thread safety of object code produced
+ by the compiler or that of libraries supplied with it.
+
File: gcc.info, Node: ARM Options, Next: MN10200 Options, Prev: SPARC Options, Up: Submodel Options
ARM Options
-----------
! These `-m' options are defined for Advanced RISC Machines (ARM)
architectures:
`-mapcs-frame'
*************** File: gcc.info, Node: MN10200 Options,
*** 6399,6405 ****
MN10200 Options
---------------
! These `-m' options are defined for Matsushita MN10200 architectures:
`-mrelax'
Indicate to the linker that it should perform a relaxation
optimization pass to shorten branches, calls and absolute memory
--- 6414,6420 ----
MN10200 Options
---------------
! These `-m' options are defined for Matsushita MN10200 architectures:
`-mrelax'
Indicate to the linker that it should perform a relaxation
optimization pass to shorten branches, calls and absolute memory
*************** File: gcc.info, Node: MN10300 Options,
*** 6414,6420 ****
MN10300 Options
---------------
! These `-m' options are defined for Matsushita MN10300 architectures:
`-mmult-bug'
Generate code to avoid bugs in the multiply instructions for the
--- 6429,6435 ----
MN10300 Options
---------------
! These `-m' options are defined for Matsushita MN10300 architectures:
`-mmult-bug'
Generate code to avoid bugs in the multiply instructions for the
*************** File: gcc.info, Node: M32R/D Options,
*** 6448,6454 ****
M32R/D Options
--------------
! These `-m' options are defined for Mitsubishi M32R/D architectures:
`-m32rx'
Generate code for the M32R/X.
--- 6463,6469 ----
M32R/D Options
--------------
! These `-m' options are defined for Mitsubishi M32R/D architectures:
`-m32rx'
Generate code for the M32R/X.
*************** File: gcc.info, Node: M88K Options, Ne
*** 6514,6520 ****
M88K Options
------------
! These `-m' options are defined for Motorola 88k architectures:
`-m88000'
Generate code that works well on both the m88100 and the m88110.
--- 6529,6535 ----
M88K Options
------------
! These `-m' options are defined for Motorola 88k architectures:
`-m88000'
Generate code that works well on both the m88100 and the m88110.
*************** File: gcc.info, Node: RS/6000 and Power
*** 6693,6699 ****
IBM RS/6000 and PowerPC Options
-------------------------------
! These `-m' options are defined for the IBM RS/6000 and PowerPC:
`-mpower'
`-mno-power'
`-mpower2'
--- 6708,6714 ----
IBM RS/6000 and PowerPC Options
-------------------------------
! These `-m' options are defined for the IBM RS/6000 and PowerPC:
`-mpower'
`-mno-power'
`-mpower2'
*************** File: gcc.info, Node: Darwin Options,
*** 7203,7209 ****
Darwin Options
--------------
! These options are defined for all architectures running the Darwin
operating system. They are useful for compatibility with other Mac OS
compilers.
--- 7218,7224 ----
Darwin Options
--------------
! These options are defined for all architectures running the Darwin
operating system. They are useful for compatibility with other Mac OS
compilers.
*************** File: gcc.info, Node: RT Options, Next
*** 7292,7298 ****
IBM RT Options
--------------
! These `-m' options are defined for the IBM RT PC:
`-min-line-mul'
Use an in-line code sequence for integer multiplies. This is the
--- 7307,7313 ----
IBM RT Options
--------------
! These `-m' options are defined for the IBM RT PC:
`-min-line-mul'
Use an in-line code sequence for integer multiplies. This is the
*************** File: gcc.info, Node: MIPS Options, Ne
*** 7339,7345 ****
MIPS Options
------------
! These `-m' options are defined for the MIPS family of computers:
`-march=ARCH'
Generate code that will run on ARCH, which can be the name of a
--- 7354,7360 ----
MIPS Options
------------
! These `-m' options are defined for the MIPS family of computers:
`-march=ARCH'
Generate code that will run on ARCH, which can be the name of a
*************** File: gcc.info, Node: i386 and x86-64 O
*** 7650,7656 ****
Intel 386 and AMD x86-64 Options
--------------------------------
! These `-m' options are defined for the i386 and x86-64 family of
computers:
`-mcpu=CPU-TYPE'
--- 7665,7671 ----
Intel 386 and AMD x86-64 Options
--------------------------------
! These `-m' options are defined for the i386 and x86-64 family of
computers:
`-mcpu=CPU-TYPE'
*************** File: gcc.info, Node: HPPA Options, Ne
*** 7994,8000 ****
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
--- 8009,8015 ----
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
*************** File: gcc.info, Node: Intel 960 Options
*** 8172,8178 ****
Intel 960 Options
-----------------
! These `-m' options are defined for the Intel 960 implementations:
`-mCPU-TYPE'
Assume the defaults for the machine type CPU-TYPE for some of the
--- 8187,8193 ----
Intel 960 Options
-----------------
! These `-m' options are defined for the Intel 960 implementations:
`-mCPU-TYPE'
Assume the defaults for the machine type CPU-TYPE for some of the
*************** File: gcc.info, Node: DEC Alpha Options
*** 8250,8256 ****
DEC Alpha Options
-----------------
! These `-m' options are defined for the DEC Alpha implementations:
`-mno-soft-float'
`-msoft-float'
--- 8265,8271 ----
DEC Alpha Options
-----------------
! These `-m' options are defined for the DEC Alpha implementations:
`-mno-soft-float'
`-msoft-float'
*************** File: gcc.info, Node: DEC Alpha/VMS Opt
*** 8525,8531 ****
DEC Alpha/VMS Options
---------------------
! These `-m' options are defined for the DEC Alpha/VMS implementations:
`-mvms-return-codes'
Return VMS condition codes from main. The default is to return
--- 8540,8546 ----
DEC Alpha/VMS Options
---------------------
! These `-m' options are defined for the DEC Alpha/VMS implementations:
`-mvms-return-codes'
Return VMS condition codes from main. The default is to return
*************** File: gcc.info, Node: H8/300 Options,
*** 8537,8543 ****
H8/300 Options
--------------
! These `-m' options are defined for the H8/300 implementations:
`-mrelax'
Shorten some address references at link time, when possible; uses
--- 8552,8558 ----
H8/300 Options
--------------
! These `-m' options are defined for the H8/300 implementations:
`-mrelax'
Shorten some address references at link time, when possible; uses
*************** File: gcc.info, Node: SH Options, Next
*** 8574,8580 ****
SH Options
----------
! These `-m' options are defined for the SH implementations:
`-m1'
Generate code for the SH1.
--- 8589,8595 ----
SH Options
----------
! These `-m' options are defined for the SH implementations:
`-m1'
Generate code for the SH1.
*************** File: gcc.info, Node: System V Options,
*** 8662,8668 ****
Options for System V
--------------------
! These additional options are available on System V Release 4 for
compatibility with other compilers on those systems:
`-G'
--- 8677,8683 ----
Options for System V
--------------------
! These additional options are available on System V Release 4 for
compatibility with other compilers on those systems:
`-G'
*************** File: gcc.info, Node: TMS320C3x/C4x Opt
*** 8691,8697 ****
TMS320C3x/C4x Options
---------------------
! These `-m' options are defined for TMS320C3x/C4x implementations:
`-mcpu=CPU_TYPE'
Set the instruction set, register set, and instruction scheduling
--- 8706,8712 ----
TMS320C3x/C4x Options
---------------------
! These `-m' options are defined for TMS320C3x/C4x implementations:
`-mcpu=CPU_TYPE'
Set the instruction set, register set, and instruction scheduling
*************** File: gcc.info, Node: V850 Options, Ne
*** 8817,8823 ****
V850 Options
------------
! These `-m' options are defined for V850 implementations:
`-mlong-calls'
`-mno-long-calls'
--- 8832,8838 ----
V850 Options
------------
! These `-m' options are defined for V850 implementations:
`-mlong-calls'
`-mno-long-calls'
*************** File: gcc.info, Node: ARC Options, Nex
*** 8897,8903 ****
ARC Options
-----------
! These options are defined for ARC implementations:
`-EL'
Compile code for little endian mode. This is the default.
--- 8912,8918 ----
ARC Options
-----------
! These options are defined for ARC implementations:
`-EL'
Compile code for little endian mode. This is the default.
*************** File: gcc.info, Node: NS32K Options, N
*** 8933,8939 ****
NS32K Options
-------------
! These are the `-m' options defined for the 32000 series. The default
values for these options depends on which style of 32000 was selected
when the compiler was configured; the defaults for the most common
choices are given below.
--- 8948,8954 ----
NS32K Options
-------------
! These are the `-m' options defined for the 32000 series. The default
values for these options depends on which style of 32000 was selected
when the compiler was configured; the defaults for the most common
choices are given below.
*************** File: gcc.info, Node: AVR Options, Nex
*** 9055,9061 ****
AVR Options
-----------
! These options are defined for AVR implementations:
`-mmcu=MCU'
Specify ATMEL AVR instruction set or MCU type.
--- 9070,9076 ----
AVR Options
-----------
! These options are defined for AVR implementations:
`-mmcu=MCU'
Specify ATMEL AVR instruction set or MCU type.
*************** File: gcc.info, Node: MCore Options, N
*** 9107,9113 ****
MCore Options
-------------
! These are the `-m' options defined for the Motorola M*Core processors.
`-mhardlit'
`-mno-hardlit'
--- 9122,9129 ----
MCore Options
-------------
! These are the `-m' options defined for the Motorola M*Core
! processors.
`-mhardlit'
`-mno-hardlit'
*************** File: gcc.info, Node: IA-64 Options, N
*** 9152,9158 ****
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
--- 9168,9174 ----
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
*************** File: gcc.info, Node: D30V Options, Ne
*** 9237,9243 ****
D30V Options
------------
! These `-m' options are defined for D30V implementations:
`-mextmem'
Link the `.text', `.data', `.bss', `.strings', `.rodata',
--- 9253,9259 ----
D30V Options
------------
! These `-m' options are defined for D30V implementations:
`-mextmem'
Link the `.text', `.data', `.bss', `.strings', `.rodata',
*************** File: gcc.info, Node: S/390 and zSeries
*** 9274,9280 ****
S/390 and zSeries Options
-------------------------
! These are the `-m' options defined for the S/390 and zSeries
architecture.
`-mhard-float'
--- 9290,9296 ----
S/390 and zSeries Options
-------------------------
! These are the `-m' options defined for the S/390 and zSeries
architecture.
`-mhard-float'
*************** File: gcc.info, Node: CRIS Options, Ne
*** 9326,9332 ****
CRIS Options
------------
! These options are defined specifically for the CRIS ports.
`-march=ARCHITECTURE-TYPE'
`-mcpu=ARCHITECTURE-TYPE'
--- 9342,9348 ----
CRIS Options
------------
! These options are defined specifically for the CRIS ports.
`-march=ARCHITECTURE-TYPE'
`-mcpu=ARCHITECTURE-TYPE'
*************** File: gcc.info, Node: MMIX Options, Ne
*** 9443,9449 ****
MMIX Options
------------
! These options are defined for the MMIX:
`-mlibfuncs'
`-mno-libfuncs'
--- 9459,9465 ----
MMIX Options
------------
! These options are defined for the MMIX:
`-mlibfuncs'
`-mno-libfuncs'
*************** File: gcc.info, Node: PDP-11 Options,
*** 9512,9518 ****
PDP-11 Options
--------------
! These options are defined for the PDP-11:
`-mfpu'
Use hardware FPP floating point. This is the default. (FIS
--- 9528,9534 ----
PDP-11 Options
--------------
! These options are defined for the PDP-11:
`-mfpu'
Use hardware FPP floating point. This is the default. (FIS
*************** File: gcc.info, Node: Xstormy16 Options
*** 9593,9599 ****
Xstormy16 Options
-----------------
! These options are defined for Xstormy16:
`-msim'
Choose startup files and linker script suitable for the simulator.
--- 9609,9615 ----
Xstormy16 Options
-----------------
! These options are defined for Xstormy16:
`-msim'
Choose startup files and linker script suitable for the simulator.
*************** File: gcc.info, Node: Xtensa Options,
*** 9758,9764 ****
Xtensa Options
--------------
! The Xtensa architecture is designed to support many different
configurations. The compiler's default options can be set to match a
particular Xtensa configuration by copying a configuration file into the
GCC sources when building GCC. The options below may be used to
--- 9774,9780 ----
Xtensa Options
--------------
! The Xtensa architecture is designed to support many different
configurations. The compiler's default options can be set to match a
particular Xtensa configuration by copying a configuration file into the
GCC sources when building GCC. The options below may be used to
*************** File: gcc.info, Node: Code Gen Options,
*** 9906,9912 ****
Options for Code Generation Conventions
=======================================
! These machine-independent options control the interface conventions
used in code generation.
Most of them have both positive and negative forms; the negative form
--- 9922,9928 ----
Options for Code Generation Conventions
=======================================
! These machine-independent options control the interface conventions
used in code generation.
Most of them have both positive and negative forms; the negative form
*************** File: gcc.info, Node: Environment Varia
*** 10268,10276 ****
Environment Variables Affecting GCC
===================================
! 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.
Note that you can also specify places to search using options such as
--- 10284,10292 ----
Environment Variables Affecting GCC
===================================
! 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.
Note that you can also specify places to search using options such as
*************** File: gcc.info, Node: Running Protoize,
*** 10440,10447 ****
Running Protoize
================
! The program `protoize' is an optional part of GCC. You can use it to
! add prototypes to a program, thus converting the program to ISO C in
one respect. The companion program `unprotoize' does the reverse: it
removes argument types from any prototypes that are found.
--- 10456,10463 ----
Running Protoize
================
! The program `protoize' is an optional part of GCC. You can use it
! to add prototypes to a program, thus converting the program to ISO C in
one respect. The companion program `unprotoize' does the reverse: it
removes argument types from any prototypes that are found.
*************** File: gcc.info, Node: C Implementation,
*** 10590,10599 ****
C Implementation-defined behavior
*********************************
! A conforming implementation of ISO C is required to document its choice
! of behavior in each of the areas that are designated "implementation
! defined." The following lists all such areas, along with the section
! number from the ISO/IEC 9899:1999 standard.
* Menu:
--- 10606,10615 ----
C Implementation-defined behavior
*********************************
! A conforming implementation of ISO C is required to document its
! choice of behavior in each of the areas that are designated
! "implementation defined." The following lists all such areas, along
! with the section number from the ISO/IEC 9899:1999 standard.
* Menu:
*************** File: gcc.info, Node: Environment imple
*** 10632,10639 ****
Environment
===========
! The behavior of these points are dependent on the implementation of the
! C library, and are not defined by GCC itself.
File: gcc.info, Node: Identifiers implementation, Next: Characters implementation, Prev: Environment implementation, Up: C Implementation
--- 10648,10655 ----
Environment
===========
! The behavior of these points are dependent on the implementation of
! the C library, and are not defined by GCC itself.
File: gcc.info, Node: Identifiers implementation, Next: Characters implementation, Prev: Environment implementation, Up: C Implementation
*************** File: gcc.info, Node: Library functions
*** 10926,10933 ****
Library functions
=================
! The behavior of these points are dependent on the implementation of the
! C library, and are not defined by GCC itself.
File: gcc.info, Node: Architecture implementation, Next: Locale-specific behavior implementation, Prev: Library functions implementation, Up: C Implementation
--- 10942,10949 ----
Library functions
=================
! The behavior of these points are dependent on the implementation of
! the C library, and are not defined by GCC itself.
File: gcc.info, Node: Architecture implementation, Next: Locale-specific behavior implementation, Prev: Library functions implementation, Up: C Implementation
*************** File: gcc.info, Node: Locale-specific b
*** 10951,10958 ****
Locale-specific behavior
========================
! The behavior of these points are dependent on the implementation of the
! C library, and are not defined by GCC itself.
File: gcc.info, Node: C Extensions, Next: C++ Extensions, Prev: C Implementation, Up: Top
--- 10967,10974 ----
Locale-specific behavior
========================
! The behavior of these points are dependent on the implementation of
! the C library, and are not defined by GCC itself.
File: gcc.info, Node: C Extensions, Next: C++ Extensions, Prev: C Implementation, Up: Top
*************** File: gcc.info, Node: C Extensions, Ne
*** 10960,10966 ****
Extensions to the C Language Family
***********************************
! 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
--- 10976,10982 ----
Extensions to the C Language Family
***********************************
! 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
*************** File: gcc.info, Node: Statement Exprs,
*** 11034,11042 ****
Statements and Declarations in Expressions
==========================================
! A compound statement enclosed in parentheses may appear as an expression
! in GNU C. This allows you to use loops, switches, and local variables
! within an expression.
Recall that a compound statement is a sequence of statements
surrounded by braces; in this construct, parentheses go around the
--- 11050,11058 ----
Statements and Declarations in Expressions
==========================================
! A compound statement enclosed in parentheses may appear as an
! expression in GNU C. This allows you to use loops, switches, and local
! variables within an expression.
Recall that a compound statement is a sequence of statements
surrounded by braces; in this construct, parentheses go around the
*************** File: gcc.info, Node: Local Labels, Ne
*** 11111,11117 ****
Locally Declared Labels
=======================
! Each statement expression is a scope in which "local labels" can be
declared. A local label is simply an identifier; you can jump to it
with an ordinary `goto' statement, but only from within the statement
expression it belongs to.
--- 11127,11133 ----
Locally Declared Labels
=======================
! Each statement expression is a scope in which "local labels" can be
declared. A local label is simply an identifier; you can jump to it
with an ordinary `goto' statement, but only from within the statement
expression it belongs to.
*************** File: gcc.info, Node: Labels as Values,
*** 11161,11168 ****
Labels as Values
================
! 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:
--- 11177,11184 ----
Labels as Values
================
! 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:
*************** File: gcc.info, Node: Nested Functions,
*** 11225,11231 ****
Nested Functions
================
! A "nested function" is a function defined inside another function.
(Nested functions are not supported for 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:
--- 11241,11247 ----
Nested Functions
================
! A "nested function" is a function defined inside another function.
(Nested functions are not supported for 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:
*************** File: gcc.info, Node: Constructing Call
*** 11340,11346 ****
Constructing Function Calls
===========================
! Using the built-in functions described below, you can record the
arguments a function received, and call another function with the same
arguments, without knowing the number or types of the arguments.
--- 11356,11362 ----
Constructing Function Calls
===========================
! Using the built-in functions described below, you can record the
arguments a function received, and call another function with the same
arguments, without knowing the number or types of the arguments.
*************** File: gcc.info, Node: Typeof, Next: Lv
*** 11387,11393 ****
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'.
--- 11403,11409 ----
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'.
*************** File: gcc.info, Node: Lvalues, Next: C
*** 11481,11489 ****
Generalized Lvalues
===================
! Compound expressions, conditional expressions and casts are allowed as
! lvalues provided their operands are lvalues. This means that you can
! take their addresses or store values into them.
All these extensions are deprecated.
--- 11497,11505 ----
Generalized Lvalues
===================
! Compound expressions, conditional expressions and casts are allowed
! as lvalues provided their operands are lvalues. This means that you
! can take their addresses or store values into them.
All these extensions are deprecated.
*************** File: gcc.info, Node: Conditionals, Ne
*** 11547,11555 ****
Conditionals with Omitted Operands
==================================
! The middle operand in a conditional expression may be omitted. Then if
! the first operand is nonzero, its value is the value of the conditional
! expression.
Therefore, the expression
--- 11563,11571 ----
Conditionals with Omitted Operands
==================================
! The middle operand in a conditional expression may be omitted. Then
! if the first operand is nonzero, its value is the value of the
! conditional expression.
Therefore, the expression
*************** File: gcc.info, Node: Long Long, Next:
*** 11574,11586 ****
Double-Word Integers
====================
! ISO C99 supports data types for integers that are at least 64 bits wide,
! and as an extension GCC supports them in C89 mode and in C++. 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.
Addition, subtraction, and bitwise boolean operations on these types
--- 11590,11602 ----
Double-Word Integers
====================
! ISO C99 supports data types for integers that are at least 64 bits
! wide, and as an extension GCC supports them in C89 mode and in C++.
! 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.
Addition, subtraction, and bitwise boolean operations on these types
*************** File: gcc.info, Node: Complex, Next: H
*** 11604,11610 ****
Complex Numbers
===============
! ISO C99 supports complex floating data types, and as an extension GCC
supports them in C89 mode and in C++, and 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
--- 11620,11626 ----
Complex Numbers
===============
! ISO C99 supports complex floating data types, and as an extension GCC
supports them in C89 mode and in C++, and 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
*************** File: gcc.info, Node: Hex Floats, Next
*** 11654,11660 ****
Hex Floats
==========
! ISO C99 supports 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 C89 mode (except in some cases when strictly conforming) and in C++.
--- 11670,11676 ----
Hex Floats
==========
! ISO C99 supports 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 C89 mode (except in some cases when strictly conforming) and in C++.
*************** File: gcc.info, Node: Zero Length, Nex
*** 11676,11682 ****
Arrays of Length Zero
=====================
! Zero-length arrays are allowed in GNU C. They are very useful as the
last element of a structure which is really a header for a
variable-length object:
--- 11692,11698 ----
Arrays of Length Zero
=====================
! Zero-length arrays are allowed in GNU C. They are very useful as the
last element of a structure which is really a header for a
variable-length object:
*************** File: gcc.info, Node: Empty Structures,
*** 11759,11765 ****
Structures With No Members
==========================
! GCC permits a C structure to have no members:
struct empty {
};
--- 11775,11781 ----
Structures With No Members
==========================
! GCC permits a C structure to have no members:
struct empty {
};
*************** File: gcc.info, Node: Variable Length,
*** 11774,11780 ****
Arrays of Variable Length
=========================
! Variable-length automatic arrays are allowed in ISO C99, and as an
extension GCC accepts them in C89 mode and in C++. (However, GCC's
implementation of variable-length arrays does not yet conform in detail
to the ISO C99 standard.) These arrays are declared like any other
--- 11790,11796 ----
Arrays of Variable Length
=========================
! Variable-length automatic arrays are allowed in ISO C99, and as an
extension GCC accepts them in C89 mode and in C++. (However, GCC's
implementation of variable-length arrays does not yet conform in detail
to the ISO C99 standard.) These arrays are declared like any other
*************** File: gcc.info, Node: Variadic Macros,
*** 11845,11851 ****
Macros with a Variable Number of Arguments.
===========================================
! In the ISO C standard of 1999, a macro can be declared to accept a
variable number of arguments much as a function can. The syntax for
defining the macro is similar to that of a function. Here is an
example:
--- 11861,11867 ----
Macros with a Variable Number of Arguments.
===========================================
! In the ISO C standard of 1999, a macro can be declared to accept a
variable number of arguments much as a function can. The syntax for
defining the macro is similar to that of a function. Here is an
example:
*************** File: gcc.info, Node: Escaped Newlines,
*** 11901,11907 ****
Slightly Looser Rules for Escaped Newlines
==========================================
! Recently, the preprocessor has relaxed its treatment of escaped
newlines. Previously, the newline had to immediately follow a
backslash. The current implementation allows whitespace in the form of
spaces, horizontal and vertical tabs, and form feeds between the
--- 11917,11923 ----
Slightly Looser Rules for Escaped Newlines
==========================================
! Recently, the preprocessor has relaxed its treatment of escaped
newlines. Previously, the newline had to immediately follow a
backslash. The current implementation allows whitespace in the form of
spaces, horizontal and vertical tabs, and form feeds between the
*************** File: gcc.info, Node: Subscripting, Ne
*** 11918,11924 ****
Non-Lvalue Arrays May Have Subscripts
=====================================
! 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, GCC allows such arrays to be subscripted in C89
--- 11934,11940 ----
Non-Lvalue Arrays May Have Subscripts
=====================================
! 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, GCC allows such arrays to be subscripted in C89
*************** File: gcc.info, Node: Pointer Arith, N
*** 11940,11948 ****
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.
--- 11956,11964 ----
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.
*************** File: gcc.info, Node: Initializers, Ne
*** 11956,11962 ****
Non-Constant Initializers
=========================
! As in standard C++ and ISO C99, the elements of an aggregate
initializer for an automatic variable are not required to be constant
expressions in GNU C. Here is an example of an initializer with
run-time varying elements:
--- 11972,11978 ----
Non-Constant Initializers
=========================
! As in standard C++ and ISO C99, the elements of an aggregate
initializer for an automatic variable are not required to be constant
expressions in GNU C. Here is an example of an initializer with
run-time varying elements:
*************** File: gcc.info, Node: Compound Literals
*** 11973,11979 ****
Compound Literals
=================
! ISO C99 supports compound literals. A compound literal looks like a
cast containing an initializer. Its value is an object of the type
specified in the cast, containing the elements specified in the
initializer; it is an lvalue. As an extension, GCC supports compound
--- 11989,11995 ----
Compound Literals
=================
! ISO C99 supports compound literals. A compound literal looks like a
cast containing an initializer. Its value is an object of the type
specified in the cast, containing the elements specified in the
initializer; it is an lvalue. As an extension, GCC supports compound
*************** File: gcc.info, Node: Designated Inits,
*** 12031,12037 ****
Designated Initializers
=======================
! Standard C89 requires the elements of an initializer to appear in a
fixed order, the same as the order of the elements in the array or
structure being initialized.
--- 12047,12053 ----
Designated Initializers
=======================
! Standard C89 requires the elements of an initializer to appear in a
fixed order, the same as the order of the elements in the array or
structure being initialized.
*************** File: gcc.info, Node: Case Ranges, Nex
*** 12138,12145 ****
Case Ranges
===========
! You can specify a range of consecutive values in a single `case' label,
! like this:
case LOW ... HIGH:
--- 12154,12161 ----
Case Ranges
===========
! You can specify a range of consecutive values in a single `case'
! label, like this:
case LOW ... HIGH:
*************** File: gcc.info, Node: Cast to Union, N
*** 12167,12173 ****
Cast to a Union Type
====================
! A cast to union type is similar to other casts, except that the type
specified is a union type. You can specify the type either with `union
TAG' or with a typedef name. A cast to union is actually a constructor
though, not a cast, and hence does not yield an lvalue like normal
--- 12183,12189 ----
Cast to a Union Type
====================
! A cast to union type is similar to other casts, except that the type
specified is a union type. You can specify the type either with `union
TAG' or with a typedef name. A cast to union is actually a constructor
though, not a cast, and hence does not yield an lvalue like normal
*************** File: gcc.info, Node: Mixed Declaration
*** 12202,12208 ****
Mixed Declarations and Code
===========================
! ISO C99 and ISO C++ allow declarations and code to be freely mixed
within compound statements. As an extension, GCC also allows this in
C89 mode. For example, you could do:
--- 12218,12224 ----
Mixed Declarations and Code
===========================
! ISO C99 and ISO C++ allow declarations and code to be freely mixed
within compound statements. As an extension, GCC also allows this in
C89 mode. For example, you could do:
*************** File: gcc.info, Node: Function Attribut
*** 12220,12226 ****
Declaring Attributes of Functions
=================================
! In GNU C, you declare certain things about functions called in your
program which help the compiler optimize function calls and check your
code more carefully.
--- 12236,12242 ----
Declaring Attributes of Functions
=================================
! In GNU C, you declare certain things about functions called in your
program which help the compiler optimize function calls and check your
code more carefully.
*************** File: gcc.info, Node: Attribute Syntax,
*** 12849,12855 ****
Attribute Syntax
================
! This section describes the syntax with which `__attribute__' may be
used, and the constructs to which attribute specifiers bind, for the C
language. Some details may vary for C++ and Objective-C. Because of
infelicities in the grammar for attributes, some forms described here
--- 12865,12871 ----
Attribute Syntax
================
! This section describes the syntax with which `__attribute__' may be
used, and the constructs to which attribute specifiers bind, for the C
language. Some details may vary for C++ and Objective-C. Because of
infelicities in the grammar for attributes, some forms described here
*************** File: gcc.info, Node: Function Prototyp
*** 13052,13058 ****
Prototypes and Old-Style Function Definitions
=============================================
! GNU C extends ISO C to allow a function prototype to override a later
old-style non-prototype definition. Consider the following example:
/* Use prototypes unless the compiler is old-fashioned. */
--- 13068,13074 ----
Prototypes and Old-Style Function Definitions
=============================================
! GNU C extends ISO C to allow a function prototype to override a later
old-style non-prototype definition. Consider the following example:
/* Use prototypes unless the compiler is old-fashioned. */
*************** File: gcc.info, Node: C++ Comments, Ne
*** 13106,13112 ****
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
--- 13122,13128 ----
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
*************** File: gcc.info, Node: Dollar Signs, Ne
*** 13119,13128 ****
Dollar Signs in Identifier Names
================================
! In GNU C, you may normally use dollar signs in identifier names. This
! is because many traditional C implementations allow such identifiers.
! However, dollar signs in identifiers are not supported on a few target
! machines, typically because the target assembler does not allow them.
File: gcc.info, Node: Character Escapes, Next: Variable Attributes, Prev: Dollar Signs, Up: C Extensions
--- 13135,13145 ----
Dollar Signs in Identifier Names
================================
! In GNU C, you may normally use dollar signs in identifier names.
! This is because many traditional C implementations allow such
! identifiers. However, dollar signs in identifiers are not supported on
! a few target machines, typically because the target assembler does not
! allow them.
File: gcc.info, Node: Character Escapes, Next: Variable Attributes, Prev: Dollar Signs, Up: C Extensions
*************** File: gcc.info, Node: Character Escapes
*** 13130,13136 ****
The Character in Constants
================================
! You can use the sequence `\e' in a string or character constant to
stand for the ASCII character .
--- 13147,13153 ----
The Character in Constants
================================
! You can use the sequence `\e' in a string or character constant to
stand for the ASCII character .
*************** File: gcc.info, Node: Alignment, Next:
*** 13139,13146 ****
Inquiring on Alignment of Types or Variables
============================================
! The keyword `__alignof__' allows you to inquire about how an object is
! aligned, or the minimum alignment usually required by a type. Its
syntax is just like `sizeof'.
For example, if the target machine requires a `double' value to be
--- 13156,13163 ----
Inquiring on Alignment of Types or Variables
============================================
! The keyword `__alignof__' allows you to inquire about how an object
! is aligned, or the minimum alignment usually required by a type. Its
syntax is just like `sizeof'.
For example, if the target machine requires a `double' value to be
*************** File: gcc.info, Node: Variable Attribut
*** 13170,13177 ****
Specifying Attributes of Variables
==================================
! The keyword `__attribute__' allows you to specify special attributes of
! variables or structure fields. This keyword is followed by an
attribute specification inside double parentheses. Some attributes are
currently defined generically for variables. Other attributes are
defined for variables on particular target systems. Other attributes
--- 13187,13194 ----
Specifying Attributes of Variables
==================================
! The keyword `__attribute__' allows you to specify special attributes
! of variables or structure fields. This keyword is followed by an
attribute specification inside double parentheses. Some attributes are
currently defined generically for variables. Other attributes are
defined for variables on particular target systems. Other attributes
*************** File: gcc.info, Node: Type Attributes,
*** 13457,13466 ****
Specifying Attributes of Types
==============================
! The keyword `__attribute__' allows you to specify special attributes of
! `struct' and `union' types when you define such types. This keyword is
! followed by an attribute specification inside double parentheses. Six
! attributes are currently defined for types: `aligned', `packed',
`transparent_union', `unused', `deprecated' and `may_alias'. Other
attributes are defined for functions (*note Function Attributes::) and
for variables (*note Variable Attributes::).
--- 13474,13483 ----
Specifying Attributes of Types
==============================
! The keyword `__attribute__' allows you to specify special attributes
! of `struct' and `union' types when you define such types. This keyword
! is followed by an attribute specification inside double parentheses.
! Six attributes are currently defined for types: `aligned', `packed',
`transparent_union', `unused', `deprecated' and `may_alias'. Other
attributes are defined for functions (*note Function Attributes::) and
for variables (*note Variable Attributes::).
*************** File: gcc.info, Node: Inline, Next: Ex
*** 13699,13711 ****
An Inline Function is As Fast As a Macro
========================================
! By declaring a function `inline', you can direct GCC to integrate that
! function's code into the code for its callers. This makes execution
! faster by eliminating the function-call overhead; in addition, if any
! of the actual argument values are constant, their known values may
! permit simplifications at compile time so that not all of the inline
! function's code needs to be included. The effect on code size is less
! predictable; object code may be larger or smaller with function
inlining, depending on the particular case. Inlining of functions is an
optimization and it really "works" only in optimizing compilation. If
you don't use `-O', no function is really inline.
--- 13716,13728 ----
An Inline Function is As Fast As a Macro
========================================
! By declaring a function `inline', you can direct GCC to integrate
! that function's code into the code for its callers. This makes
! execution faster by eliminating the function-call overhead; in
! addition, if any of the actual argument values are constant, their known
! values may permit simplifications at compile time so that not all of the
! inline function's code needs to be included. The effect on code size is
! less predictable; object code may be larger or smaller with function
inlining, depending on the particular case. Inlining of functions is an
optimization and it really "works" only in optimizing compilation. If
you don't use `-O', no function is really inline.
*************** File: gcc.info, Node: Extended Asm, Ne
*** 13796,13805 ****
Assembler Instructions with C Expression Operands
=================================================
! In an assembler instruction using `asm', you can specify the operands
! of the instruction using C expressions. This means you need not guess
! which registers or memory locations will contain the data you want to
! use.
You must specify an assembler instruction template much like what
appears in a machine description, plus an operand constraint string for
--- 13813,13822 ----
Assembler Instructions with C Expression Operands
=================================================
! In an assembler instruction using `asm', you can specify the
! operands of the instruction using C expressions. This means you need
! not guess which registers or memory locations will contain the data you
! want to use.
You must specify an assembler instruction template much like what
appears in a machine description, plus an operand constraint string for
*************** programs, write `__asm__' instead of `as
*** 14096,14103 ****
i386 floating point asm operands
--------------------------------
! There are several rules on the usage of stack-like regs in asm_operands
! insns. These rules apply only to the operands that are stack-like regs:
1. Given a set of input regs that die in an asm_operands, it is
necessary to know which are implicitly popped by the asm, and
--- 14113,14121 ----
i386 floating point asm operands
--------------------------------
! There are several rules on the usage of stack-like regs in
! asm_operands insns. These rules apply only to the operands that are
! stack-like regs:
1. Given a set of input regs that die in an asm_operands, it is
necessary to know which are implicitly popped by the asm, and
*************** File: gcc.info, Node: Constraints, Nex
*** 14175,14181 ****
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
--- 14193,14199 ----
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
*************** File: gcc.info, Node: Simple Constraint
*** 14195,14201 ****
Simple Constraints
------------------
! The simplest kind of constraint is a string full of letters, each of
which describes one kind of operand that is permitted. Here are the
letters that are allowed:
--- 14213,14219 ----
Simple Constraints
------------------
! The simplest kind of constraint is a string full of letters, each of
which describes one kind of operand that is permitted. Here are the
letters that are allowed:
*************** File: gcc.info, Node: Multi-Alternative
*** 14353,14363 ****
Multiple Alternative Constraints
--------------------------------
! Sometimes a single instruction has multiple alternative sets of possible
! operands. For example, on the 68000, a logical-or instruction can
! combine register or an immediate value into memory, or it can combine
! any kind of operand into a register; but it cannot combine one memory
! location into another.
These constraints are represented as multiple alternatives. An
alternative can be described by a series of letters for each operand.
--- 14371,14381 ----
Multiple Alternative Constraints
--------------------------------
! Sometimes a single instruction has multiple alternative sets of
! possible operands. For example, on the 68000, a logical-or instruction
! can combine register or an immediate value into memory, or it can
! combine any kind of operand into a register; but it cannot combine one
! memory location into another.
These constraints are represented as multiple alternatives. An
alternative can be described by a series of letters for each operand.
*************** File: gcc.info, Node: Modifiers, Next:
*** 14391,14397 ****
Constraint Modifier Characters
------------------------------
! Here are constraint modifier characters.
`='
Means that this operand is write-only for this instruction: the
--- 14409,14415 ----
Constraint Modifier Characters
------------------------------
! Here are constraint modifier characters.
`='
Means that this operand is write-only for this instruction: the
*************** File: gcc.info, Node: Machine Constrain
*** 14454,14462 ****
Constraints for Particular Machines
-----------------------------------
! 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
--- 14472,14480 ----
Constraints for Particular Machines
-----------------------------------
! 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
*************** File: gcc.info, Node: Asm Labels, Next
*** 15464,15470 ****
Controlling Names Used in Assembler Code
========================================
! 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 as follows:
--- 15482,15488 ----
Controlling Names Used in Assembler Code
========================================
! 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 as follows:
*************** File: gcc.info, Node: Explicit Reg Vars
*** 15506,15514 ****
Variables in Specified Registers
================================
! GNU C allows you to put a few global variables into specified hardware
! registers. You can also specify the register in which an ordinary
! register variable should be allocated.
* Global register variables reserve registers throughout the program.
This may be useful in programs such as programming language
--- 15524,15532 ----
Variables in Specified Registers
================================
! GNU C allows you to put a few global variables into specified
! hardware registers. You can also specify the register in which an
! ordinary register variable should be allocated.
* Global register variables reserve registers throughout the program.
This may be useful in programs such as programming language
*************** File: gcc.info, Node: Global Reg Vars,
*** 15541,15547 ****
Defining Global Register Variables
----------------------------------
! You can define a global register variable in GNU C like this:
register int *foo asm ("a5");
--- 15559,15565 ----
Defining Global Register Variables
----------------------------------
! You can define a global register variable in GNU C like this:
register int *foo asm ("a5");
*************** File: gcc.info, Node: Local Reg Vars,
*** 15631,15638 ****
Specifying Registers for Local Variables
----------------------------------------
! You can define a local register variable with a specified register like
! this:
register int *foo asm ("a5");
--- 15649,15656 ----
Specifying Registers for Local Variables
----------------------------------------
! You can define a local register variable with a specified register
! like this:
register int *foo asm ("a5");
*************** File: gcc.info, Node: Alternate Keyword
*** 15672,15679 ****
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
--- 15690,15697 ----
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
*************** File: gcc.info, Node: Incomplete Enums,
*** 15706,15712 ****
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
which does specify the possible values completes the type.
--- 15724,15730 ----
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
which does specify the possible values completes the type.
*************** File: gcc.info, Node: Function Names,
*** 15725,15731 ****
Function Names as Strings
=========================
! GCC predefines two magic identifiers to hold the name of the current
function. The identifier `__FUNCTION__' holds the name of the function
as it appears in the source. The identifier `__PRETTY_FUNCTION__'
holds the name of the function pretty printed in a language specific
--- 15743,15749 ----
Function Names as Strings
=========================
! GCC predefines two magic identifiers to hold the name of the current
function. The identifier `__FUNCTION__' holds the name of the function
as it appears in the source. The identifier `__PRETTY_FUNCTION__'
holds the name of the function pretty printed in a language specific
*************** File: gcc.info, Node: Return Address,
*** 15796,15802 ****
Getting the Return or Frame Address of a Function
=================================================
! These functions may be used to get information about the callers of a
function.
- Built-in Function: void * __builtin_return_address (unsigned int
--- 15814,15820 ----
Getting the Return or Frame Address of a Function
=================================================
! These functions may be used to get information about the callers of a
function.
- Built-in Function: void * __builtin_return_address (unsigned int
*************** File: gcc.info, Node: Vector Extensions
*** 15855,15864 ****
Using vector instructions through built-in functions
====================================================
! On some targets, the instruction set contains SIMD vector instructions
! that operate on multiple values contained in one large register at the
! same time. For example, on the i386 the MMX, 3Dnow! and SSE extensions
! 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':
--- 15873,15882 ----
Using vector instructions through built-in functions
====================================================
! On some targets, the instruction set contains SIMD vector
! instructions that operate on multiple values contained in one large
! register at the same time. For example, on the i386 the MMX, 3Dnow!
! and SSE extensions 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':
*************** File: gcc.info, Node: Other Builtins,
*** 15949,15955 ****
Other built-in functions provided by GCC
========================================
! GCC provides a large number of built-in functions other than the ones
mentioned above. Some of these are for internal use in the processing
of exceptions or variable-length argument lists and will not be
documented here because they may change from time to time; we do not
--- 15967,15973 ----
Other built-in functions provided by GCC
========================================
! GCC provides a large number of built-in functions other than the ones
mentioned above. Some of these are for internal use in the processing
of exceptions or variable-length argument lists and will not be
documented here because they may change from time to time; we do not
*************** File: gcc.info, Node: Target Builtins,
*** 16265,16273 ****
Built-in Functions Specific to Particular Target Machines
=========================================================
! On some target machines, GCC supports many built-in functions specific
! to those machines. Generally these generate calls to specific machine
! instructions, but allow the compiler to schedule those calls.
* Menu:
--- 16283,16291 ----
Built-in Functions Specific to Particular Target Machines
=========================================================
! On some target machines, GCC supports many built-in functions
! specific to those machines. Generally these generate calls to specific
! machine instructions, but allow the compiler to schedule those calls.
* Menu:
*************** File: gcc.info, Node: Alpha Built-in Fu
*** 16281,16287 ****
Alpha Built-in Functions
------------------------
! These built-in functions are available for the Alpha family of
processors, depending on the command-line switches used.
The following built-in functions are always available. They all
--- 16299,16305 ----
Alpha Built-in Functions
------------------------
! These built-in functions are available for the Alpha family of
processors, depending on the command-line switches used.
The following built-in functions are always available. They all
*************** File: gcc.info, Node: X86 Built-in Func
*** 16355,16361 ****
X86 Built-in Functions
----------------------
! These built-in functions are available for the i386 and x86-64 family
of computers, depending on the command-line switches used.
The following machine modes are available for use with MMX built-in
--- 16373,16379 ----
X86 Built-in Functions
----------------------
! These built-in functions are available for the i386 and x86-64 family
of computers, depending on the command-line switches used.
The following machine modes are available for use with MMX built-in
*************** File: gcc.info, Node: PowerPC AltiVec B
*** 16599,16605 ****
PowerPC AltiVec Built-in Functions
----------------------------------
! These built-in functions are available for the PowerPC family of
computers, depending on the command-line switches used.
The following machine modes are available for use with AltiVec
--- 16617,16623 ----
PowerPC AltiVec Built-in Functions
----------------------------------
! These built-in functions are available for the PowerPC family of
computers, depending on the command-line switches used.
The following machine modes are available for use with AltiVec
*************** File: gcc.info, Node: Pragmas, Next: U
*** 17688,17694 ****
Pragmas Accepted by GCC
=======================
! GCC supports several types of pragmas, primarily in order to compile
code originally written for other compilers. Note that in general we
do not recommend the use of pragmas; *Note Function Attributes::, for
further explanation.
--- 17706,17712 ----
Pragmas Accepted by GCC
=======================
! GCC supports several types of pragmas, primarily in order to compile
code originally written for other compilers. Note that in general we
do not recommend the use of pragmas; *Note Function Attributes::, for
further explanation.
*************** File: gcc.info, Node: ARM Pragmas, Nex
*** 17707,17715 ****
ARM Pragmas
-----------
! 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.
--- 17725,17734 ----
ARM Pragmas
-----------
! 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.
*************** File: gcc.info, Node: RS/6000 and Power
*** 17727,17733 ****
RS/6000 and PowerPC Pragmas
---------------------------
! 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
--- 17746,17752 ----
RS/6000 and PowerPC Pragmas
---------------------------
! 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
*************** File: gcc.info, Node: Darwin Pragmas,
*** 17748,17754 ****
Darwin Pragmas
--------------
! The following pragmas are available for all architectures running the
Darwin operating system. These are useful for compatibility with other
Mac OS compilers.
--- 17767,17773 ----
Darwin Pragmas
--------------
! The following pragmas are available for all architectures running the
Darwin operating system. These are useful for compatibility with other
Mac OS compilers.
*************** File: gcc.info, Node: Solaris Pragmas,
*** 17777,17783 ****
Solaris Pragmas
---------------
! For compatibility with the SunPRO compiler, the following pragma is
supported.
`redefine_extname OLDNAME NEWNAME'
--- 17796,17802 ----
Solaris Pragmas
---------------
! For compatibility with the SunPRO compiler, the following pragma is
supported.
`redefine_extname OLDNAME NEWNAME'
*************** File: gcc.info, Node: Tru64 Pragmas, P
*** 17793,17800 ****
Tru64 Pragmas
-------------
! For compatibility with the Compaq C compiler, the following pragma is
! supported.
`extern_prefix STRING'
This pragma renames all subsequent function and variable
--- 17812,17819 ----
Tru64 Pragmas
-------------
! For compatibility with the Compaq C compiler, the following pragma
! is supported.
`extern_prefix STRING'
This pragma renames all subsequent function and variable
*************** File: gcc.info, Node: Unnamed Fields,
*** 17814,17820 ****
Unnamed struct/union fields within structs/unions.
==================================================
! For compatibility with other compilers, GCC allows you to define a
structure or union that contains, as fields, structures and unions
without names. For example:
--- 17833,17839 ----
Unnamed struct/union fields within structs/unions.
==================================================
! For compatibility with other compilers, GCC allows you to define a
structure or union that contains, as fields, structures and unions
without names. For example:
*************** File: gcc.info, Node: Thread-Local, Pr
*** 17851,17857 ****
Thread-Local Storage
====================
! Thread-local storage (TLS) is a mechanism by which variables are
allocated such that there is one instance of the variable per extant
thread. The run-time model GCC uses to implement this originates in
the IA-64 processor-specific ABI, but has since been migrated to other
--- 17870,17876 ----
Thread-Local Storage
====================
! Thread-local storage (TLS) is a mechanism by which variables are
allocated such that there is one instance of the variable per extant
thread. The run-time model GCC uses to implement this originates in
the IA-64 processor-specific ABI, but has since been migrated to other
*************** File: gcc.info, Node: C99 Thread-Local
*** 17904,17911 ****
ISO/IEC 9899:1999 Edits for Thread-Local Storage
------------------------------------------------
! 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'
--- 17923,17930 ----
ISO/IEC 9899:1999 Edits for Thread-Local Storage
------------------------------------------------
! 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'
*************** File: gcc.info, Node: C++98 Thread-Loca
*** 17959,17965 ****
ISO/IEC 14882:1998 Edits for Thread-Local Storage
-------------------------------------------------
! 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]
--- 17978,17984 ----
ISO/IEC 14882:1998 Edits for Thread-Local Storage
-------------------------------------------------
! 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]
*************** File: gcc.info, Node: C++ Extensions,
*** 18069,18081 ****
Extensions to the C++ Language
******************************
! The GNU compiler provides these extensions to the C++ language (and you
! 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:
--- 18088,18100 ----
Extensions to the C++ Language
******************************
! The GNU compiler provides these extensions to the C++ language (and
! you 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:
*************** File: gcc.info, Node: Min and Max, Nex
*** 18100,18107 ****
Minimum and Maximum Operators in C++
====================================
! It is very convenient to have operators which return the "minimum" or
! the "maximum" of two arguments. In GNU C++ (but not in GNU C),
`A B'
is the "minimum", returning the smaller of the numeric values A
--- 18119,18126 ----
Minimum and Maximum Operators in C++
====================================
! It is very convenient to have operators which return the "minimum"
! or the "maximum" of two arguments. In GNU C++ (but not in GNU C),
`A B'
is the "minimum", returning the smaller of the numeric values A
*************** File: gcc.info, Node: Volatiles, Next:
*** 18138,18158 ****
When is a Volatile Object Accessed?
===================================
! Both the C and C++ standard have the concept of volatile objects. These
! are normally accessed by pointers and used for accessing hardware. The
! standards encourage compilers to refrain from optimizations concerning
! accesses to volatile objects that it might perform on non-volatile
! objects. The C standard leaves it implementation defined as to what
! constitutes a volatile access. The C++ standard omits to specify this,
! except to say that C++ should behave in a similar manner to C with
! respect to volatiles, where possible. The minimum either standard
! specifies is that at a sequence point all previous accesses to volatile
! objects have stabilized and no subsequent accesses have occurred. Thus
! an implementation is free to reorder and combine volatile accesses
! which occur between sequence points, but cannot do so for accesses
! across a sequence point. The use of volatiles does not allow you to
! violate the restriction on updating objects multiple times within a
! sequence point.
In most expressions, it is intuitively obvious what is a read and
what is a write. For instance
--- 18157,18177 ----
When is a Volatile Object Accessed?
===================================
! Both the C and C++ standard have the concept of volatile objects.
! These are normally accessed by pointers and used for accessing
! hardware. The standards encourage compilers to refrain from
! optimizations concerning accesses to volatile objects that it might
! perform on non-volatile objects. The C standard leaves it
! implementation defined as to what constitutes a volatile access. The
! C++ standard omits to specify this, except to say that C++ should
! behave in a similar manner to C with respect to volatiles, where
! possible. The minimum either standard specifies is that at a sequence
! point all previous accesses to volatile objects have stabilized and no
! subsequent accesses have occurred. Thus an implementation is free to
! reorder and combine volatile accesses which occur between sequence
! points, but cannot do so for accesses across a sequence point. The use
! of volatiles does not allow you to violate the restriction on updating
! objects multiple times within a sequence point.
In most expressions, it is intuitively obvious what is a read and
what is a write. For instance
*************** File: gcc.info, Node: Restricted Pointe
*** 18211,18217 ****
Restricting Pointer Aliasing
============================
! As with gcc, 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++.
--- 18230,18236 ----
Restricting Pointer Aliasing
============================
! As with gcc, 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++.
*************** File: gcc.info, Node: Vague Linkage, N
*** 18254,18260 ****
Vague Linkage
=============
! There are several constructs in C++ which require space in the object
file but are not clearly tied to a single translation unit. We say that
these constructs have "vague linkage". Typically such constructs are
emitted wherever they are needed, though sometimes we can be more
--- 18273,18279 ----
Vague Linkage
=============
! There are several constructs in C++ which require space in the object
file but are not clearly tied to a single translation unit. We say that
these constructs have "vague linkage". Typically such constructs are
emitted wherever they are needed, though sometimes we can be more
*************** File: gcc.info, Node: C++ Interface, N
*** 18331,18339 ****
Declarations and Definitions in One Header
==========================================
! C++ object definitions can be quite complex. In principle, your source
! code will need two kinds of things for each object that you use across
! more than one source file. First, you need an "interface"
specification, describing its structure with type declarations and
function prototypes. Second, you need the "implementation" itself. It
can be tedious to maintain a separate interface description in a header
--- 18350,18358 ----
Declarations and Definitions in One Header
==========================================
! C++ object definitions can be quite complex. In principle, your
! source code will need two kinds of things for each object that you use
! across more than one source file. First, you need an "interface"
specification, describing its structure with type declarations and
function prototypes. Second, you need the "implementation" itself. It
can be tedious to maintain a separate interface description in a header
*************** File: gcc.info, Node: Template Instanti
*** 18435,18441 ****
Where's the Template?
=====================
! C++ templates are the first language feature to require more
intelligence from the environment than one usually finds on a UNIX
system. Somehow the compiler and linker have to make sure that each
template instance occurs exactly once in the executable if it is needed,
--- 18454,18460 ----
Where's the Template?
=====================
! C++ templates are the first language feature to require more
intelligence from the environment than one usually finds on a UNIX
system. Somehow the compiler and linker have to make sure that each
template instance occurs exactly once in the executable if it is needed,
*************** File: gcc.info, Node: Bound member func
*** 18573,18582 ****
Extracting the function pointer from a bound pointer to member function
=======================================================================
! 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
that is not an option, you can extract the pointer to the function that
--- 18592,18601 ----
Extracting the function pointer from a bound pointer to member function
=======================================================================
! 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
that is not an option, you can extract the pointer to the function that
*************** File: gcc.info, Node: C++ Attributes,
*** 18610,18616 ****
C++-Specific Variable, Function, and Type Attributes
====================================================
! Some attributes only make sense for C++ programs.
`init_priority (PRIORITY)'
In Standard C++, objects defined at namespace scope are guaranteed
--- 18629,18635 ----
C++-Specific Variable, Function, and Type Attributes
====================================================
! Some attributes only make sense for C++ programs.
`init_priority (PRIORITY)'
In Standard C++, objects defined at namespace scope are guaranteed
*************** File: gcc.info, Node: Java Exceptions,
*** 18646,18652 ****
Java Exceptions
===============
! The Java language uses a slightly different exception handling model
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
--- 18665,18671 ----
Java Exceptions
===============
! The Java language uses a slightly different exception handling model
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
*************** File: gcc.info, Node: Deprecated Featur
*** 18681,18687 ****
Deprecated Features
===================
! In the past, the GNU C++ compiler was extended to experiment with new
features, at a time when the C++ language was still evolving. Now that
the C++ standard is complete, some of those features are superseded by
superior alternatives. Using the old features might cause a warning in
--- 18700,18706 ----
Deprecated Features
===================
! In the past, the GNU C++ compiler was extended to experiment with new
features, at a time when the C++ language was still evolving. Now that
the C++ standard is complete, some of those features are superseded by
superior alternatives. Using the old features might cause a warning in
*************** File: gcc.info, Node: Backwards Compati
*** 18727,18740 ****
Backwards Compatibility
=======================
! Now that there is a definitive ISO standard C++, G++ has a specification
! to adhere to. The C++ language evolved over time, and features that
! used to be acceptable in previous drafts of the standard, such as the
! ARM [Annotated C++ Reference Manual], are no longer accepted. In order
! to allow compilation of C++ written to such drafts, G++ contains some
! backwards compatibilities. _All such backwards compatibility features
! are liable to disappear in future versions of G++._ They should be
! considered deprecated *Note Deprecated Features::.
`For scope'
If a variable is declared at for scope, it used to remain in scope
--- 18746,18759 ----
Backwards Compatibility
=======================
! Now that there is a definitive ISO standard C++, G++ has a
! specification to adhere to. The C++ language evolved over time, and
! features that used to be acceptable in previous drafts of the standard,
! such as the ARM [Annotated C++ Reference Manual], are no longer
! accepted. In order to allow compilation of C++ written to such drafts,
! G++ contains some backwards compatibilities. _All such backwards
! compatibility features are liable to disappear in future versions of
! G++._ They should be considered deprecated *Note Deprecated Features::.
`For scope'
If a variable is declared at for scope, it used to remain in scope
*************** File: gcc.info, Node: Objective-C, Nex
*** 18756,18765 ****
GNU Objective-C runtime features
********************************
! This document is meant to describe some of the GNU Objective-C runtime
! features. It is not intended to teach you Objective-C, there are
! several resources on the Internet that present the language. Questions
! and comments about this document to Ovidiu Predescu .
* Menu:
--- 18775,18785 ----
GNU Objective-C runtime features
********************************
! This document is meant to describe some of the GNU Objective-C
! runtime features. It is not intended to teach you Objective-C, there
! are several resources on the Internet that present the language.
! Questions and comments about this document to Ovidiu Predescu
! .
* Menu:
*************** File: gcc.info, Node: Executing code be
*** 18775,18781 ****
`+load': Executing code before main
===================================
! 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'.
--- 18795,18801 ----
`+load': Executing code before main
===================================
! 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'.
*************** File: gcc.info, Node: What you can and
*** 18851,18857 ****
What you can and what you cannot do in `+load'
----------------------------------------------
! The `+load' implementation in the GNU runtime guarantees you the
following things:
* you can write whatever C code you like;
--- 18871,18877 ----
What you can and what you cannot do in `+load'
----------------------------------------------
! The `+load' implementation in the GNU runtime guarantees you the
following things:
* you can write whatever C code you like;
*************** File: gcc.info, Node: Type encoding, N
*** 18903,18909 ****
Type encoding
=============
! The Objective-C compiler generates type encodings for all the types.
These type encodings are used at runtime to find out information about
selectors and methods and about objects and classes.
--- 18923,18929 ----
Type encoding
=============
! The Objective-C compiler generates type encodings for all the types.
These type encodings are used at runtime to find out information about
selectors and methods and about objects and classes.
*************** File: gcc.info, Node: Garbage Collectio
*** 18998,19004 ****
Garbage Collection
==================
! Support for a new memory management policy has been added by using a
powerful conservative garbage collector, known as the
Boehm-Demers-Weiser conservative garbage collector. It is available
from `http://www.hpl.hp.com/personal/Hans_Boehm/gc/'.
--- 19018,19024 ----
Garbage Collection
==================
! Support for a new memory management policy has been added by using a
powerful conservative garbage collector, known as the
Boehm-Demers-Weiser conservative garbage collector. It is available
from `http://www.hpl.hp.com/personal/Hans_Boehm/gc/'.
*************** File: gcc.info, Node: Constant string o
*** 19072,19078 ****
Constant string objects
=======================
! 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 `@':
--- 19092,19098 ----
Constant string objects
=======================
! 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 `@':
*************** File: gcc.info, Node: compatibility_ali
*** 19129,19135 ****
compatibility_alias
===================
! This is a feature of the Objective-C compiler rather than of the
runtime, anyway since it is documented nowhere and its existence was
forgotten, we are documenting it here.
--- 19149,19155 ----
compatibility_alias
===================
! This is a feature of the Objective-C compiler rather than of the
runtime, anyway since it is documented nowhere and its existence was
forgotten, we are documenting it here.
*************** File: gcc.info, Node: Compatibility, N
*** 19155,19161 ****
Binary Compatibility
********************
! Binary compatibility encompasses several related concepts:
"application binary interface (ABI)"
The set of runtime conventions followed by all of the tools that
--- 19175,19181 ----
Binary Compatibility
********************
! Binary compatibility encompasses several related concepts:
"application binary interface (ABI)"
The set of runtime conventions followed by all of the tools that
*************** File: gcc.info, Node: Gcov, Next: Trou
*** 19301,19307 ****
`gcov'--a Test Coverage Program
*******************************
! `gcov' is a tool you can use in conjunction with GCC to test code
coverage in your programs.
* Menu:
--- 19321,19327 ----
`gcov'--a Test Coverage Program
*******************************
! `gcov' is a tool you can use in conjunction with GCC to test code
coverage in your programs.
* Menu:
*************** File: gcc.info, Node: Gcov Intro, Next
*** 19317,19323 ****
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
--- 19337,19343 ----
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
*************** File: gcc.info, Node: Gcov and Optimiza
*** 19584,19590 ****
Using `gcov' with GCC Optimization
==================================
! If you plan to use `gcov' to help optimize your code, you must first
compile your program with two special GCC options: `-fprofile-arcs
-ftest-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
--- 19604,19610 ----
Using `gcov' with GCC Optimization
==================================
! If you plan to use `gcov' to help optimize your code, you must first
compile your program with two special GCC options: `-fprofile-arcs
-ftest-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
*************** File: gcc.info, Node: Gcov Data Files,
*** 19620,19629 ****
Brief description of `gcov' data files
======================================
! `gcov' uses three files for doing profiling. The names of these files
! are derived from the original _source_ file by substituting the file
! suffix with either `.bb', `.bbg', or `.da'. All of these files are
! placed in the same directory as the source file, and contain data
stored in a platform-independent method.
The `.bb' and `.bbg' files are generated when the source file is
--- 19640,19649 ----
Brief description of `gcov' data files
======================================
! `gcov' uses three files for doing profiling. The names of these
! files are derived from the original _source_ file by substituting the
! file suffix with either `.bb', `.bbg', or `.da'. All of these files
! are placed in the same directory as the source file, and contain data
stored in a platform-independent method.
The `.bb' and `.bbg' files are generated when the source file is
*************** File: gcc.info, Node: Trouble, Next: B
*** 19725,19731 ****
Known Causes of Trouble with GCC
********************************
! This section describes known problems that affect users of GCC. Most
of these are not GCC bugs per se--if they were, we would fix them. But
the result for a user may be like the result of a bug.
--- 19745,19751 ----
Known Causes of Trouble with GCC
********************************
! This section describes known problems that affect users of GCC. Most
of these are not GCC bugs per se--if they were, we would fix them. But
the result for a user may be like the result of a bug.
*************** File: gcc.info, Node: Cross-Compiler Pr
*** 19780,19786 ****
Cross-Compiler Problems
=======================
! You may run into problems with cross compilation on certain machines,
for several reasons.
* Cross compilation can run into trouble for certain machines because
--- 19800,19806 ----
Cross-Compiler Problems
=======================
! You may run into problems with cross compilation on certain machines,
for several reasons.
* Cross compilation can run into trouble for certain machines because
*************** File: gcc.info, Node: Interoperation,
*** 19814,19820 ****
Interoperation
==============
! This section lists various difficulties encountered in using GCC
together with other compilers or with the assemblers, linkers,
libraries and debuggers on certain systems.
--- 19834,19840 ----
Interoperation
==============
! This section lists various difficulties encountered in using GCC
together with other compilers or with the assemblers, linkers,
libraries and debuggers on certain systems.
*************** File: gcc.info, Node: External Bugs, N
*** 20026,20032 ****
Problems Compiling Certain Programs
===================================
! Certain programs have problems compiling.
* Parse errors may occur compiling X11 on a Decstation running
Ultrix 4.2 because of problems in DEC's versions of the X11 header
--- 20046,20052 ----
Problems Compiling Certain Programs
===================================
! Certain programs have problems compiling.
* Parse errors may occur compiling X11 on a Decstation running
Ultrix 4.2 because of problems in DEC's versions of the X11 header
*************** File: gcc.info, Node: Incompatibilities
*** 20064,20070 ****
Incompatibilities of GCC
========================
! 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
--- 20084,20090 ----
Incompatibilities of GCC
========================
! 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
*************** File: gcc.info, Node: Fixed Headers, N
*** 20260,20266 ****
Fixed Header Files
==================
! GCC needs to install corrected versions of some system header files.
This is because most target systems have some header files that won't
work with GCC unless they are changed. Some have bugs, some are
incompatible with ISO C, and some depend on special features of other
--- 20280,20286 ----
Fixed Header Files
==================
! GCC needs to install corrected versions of some system header files.
This is because most target systems have some header files that won't
work with GCC unless they are changed. Some have bugs, some are
incompatible with ISO C, and some depend on special features of other
*************** File: gcc.info, Node: Standard Librarie
*** 20310,20322 ****
Standard Libraries
==================
! GCC by itself attempts to be a conforming freestanding implementation.
! *Note Language Standards Supported by GCC: Standards, for details of
! what this means. Beyond the library facilities required of such an
! 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
--- 20330,20342 ----
Standard Libraries
==================
! GCC by itself attempts to be a conforming freestanding
! implementation. *Note Language Standards Supported by GCC: Standards,
! for details of what this means. Beyond the library facilities required
! of such an 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
*************** File: gcc.info, Node: Disappointments,
*** 20338,20345 ****
Disappointments and Misunderstandings
=====================================
! 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.
--- 20358,20365 ----
Disappointments and Misunderstandings
=====================================
! 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.
*************** File: gcc.info, Node: C++ Misunderstand
*** 20434,20440 ****
Common Misunderstandings with GNU C++
=====================================
! C++ is a complex language and an evolving one, and its standard
definition (the ISO C++ standard) was only recently completed. As a
result, your C++ compiler may occasionally surprise you, even when its
behavior is correct. This section discusses some areas that frequently
--- 20454,20460 ----
Common Misunderstandings with GNU C++
=====================================
! C++ is a complex language and an evolving one, and its standard
definition (the ISO C++ standard) was only recently completed. As a
result, your C++ compiler may occasionally surprise you, even when its
behavior is correct. This section discusses some areas that frequently
*************** File: gcc.info, Node: Static Definition
*** 20452,20459 ****
Declare _and_ Define Static Members
-----------------------------------
! When a class has static data members, it is not enough to _declare_ the
! static member; you must also _define_ it. For example:
class Foo
{
--- 20472,20479 ----
Declare _and_ Define Static Members
-----------------------------------
! When a class has static data members, it is not enough to _declare_
! the static member; you must also _define_ it. For example:
class Foo
{
*************** File: gcc.info, Node: Temporaries, Nex
*** 20482,20488 ****
Temporaries May Vanish Before You Expect
----------------------------------------
! It is dangerous to use pointers or references to _portions_ of a
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,
--- 20502,20508 ----
Temporaries May Vanish Before You Expect
----------------------------------------
! It is dangerous to use pointers or references to _portions_ of a
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,
*************** temporaries it is not portable.
*** 20525,20531 ****
which forces it to remain until the end of the scope of the name. For
example:
! string& tmp = strfunc ();
charfunc (tmp.c_str ());
--- 20545,20551 ----
which forces it to remain until the end of the scope of the name. For
example:
! const string& tmp = strfunc ();
charfunc (tmp.c_str ());
*************** File: gcc.info, Node: Copy Assignment,
*** 20534,20540 ****
Implicit Copy-Assignment for Virtual Bases
------------------------------------------
! When a base class is virtual, only one subobject of the base class
belongs to each full object. Also, the constructors and destructors are
invoked only once, and called from the most-derived class. However,
such objects behave unspecified when being assigned. For example:
--- 20554,20560 ----
Implicit Copy-Assignment for Virtual Bases
------------------------------------------
! When a base class is virtual, only one subobject of the base class
belongs to each full object. Also, the constructors and destructors are
invoked only once, and called from the most-derived class. However,
such objects behave unspecified when being assigned. For example:
*************** File: gcc.info, Node: Protoize Caveats,
*** 20590,20596 ****
Caveats of using `protoize'
===========================
! The conversion programs `protoize' and `unprotoize' can sometimes
change a source file in a way that won't work unless you rearrange it.
* `protoize' can insert references to a type name or type tag before
--- 20610,20616 ----
Caveats of using `protoize'
===========================
! The conversion programs `protoize' and `unprotoize' can sometimes
change a source file in a way that won't work unless you rearrange it.
* `protoize' can insert references to a type name or type tag before
*************** File: gcc.info, Node: Non-bugs, Next:
*** 20668,20675 ****
Certain Changes We Don't Want to Make
=====================================
! 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.
--- 20688,20695 ----
Certain Changes We Don't Want to Make
=====================================
! 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.
*************** File: gcc.info, Node: Warnings and Erro
*** 20879,20885 ****
Warning Messages and Error Messages
===================================
! 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
--- 20899,20905 ----
Warning Messages and Error Messages
===================================
! 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
*************** File: gcc.info, Node: Bugs, Next: Serv
*** 20916,20922 ****
Reporting Bugs
**************
! Your bug reports play an essential role in making GCC reliable.
When you encounter a problem, the first thing to do is to see if it
is already known. *Note Trouble::. If it isn't known, then you should
--- 20936,20942 ----
Reporting Bugs
**************
! Your bug reports play an essential role in making GCC reliable.
When you encounter a problem, the first thing to do is to see if it
is already known. *Note Trouble::. If it isn't known, then you should
*************** File: gcc.info, Node: Bug Criteria, Ne
*** 20935,20941 ****
Have You Found a Bug?
=====================
! 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
--- 20955,20961 ----
Have You Found a Bug?
=====================
! 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
*************** File: gcc.info, Node: Bug Reporting, P
*** 20986,20992 ****
How and where to Report Bugs
============================
! Bugs should be reported to our bug database. Please refer to
`http://gcc.gnu.org/bugs.html' for up-to-date instructions how to
submit bug reports. Copies of this file in HTML (`bugs.html') and
plain text (`BUGS') are also part of GCC releases.
--- 21006,21012 ----
How and where to Report Bugs
============================
! Bugs should be reported to our bug database. Please refer to
`http://gcc.gnu.org/bugs.html' for up-to-date instructions how to
submit bug reports. Copies of this file in HTML (`bugs.html') and
plain text (`BUGS') are also part of GCC releases.
*************** File: gcc.info, Node: Service, Next: C
*** 20997,21004 ****
How To Get Help with GCC
************************
! 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
(for help installing or using GCC), and if
--- 21017,21024 ----
How To Get Help with GCC
************************
! 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
(for help installing or using GCC), and if
*************** File: gcc.info, Node: Contributing, Ne
*** 21019,21026 ****
Contributing to GCC Development
*******************************
! If you would like to help pretest GCC releases to assure they work well,
! our current development sources are available by CVS (see
`http://gcc.gnu.org/cvs.html'). Source and binary snapshots are also
available for FTP; see `http://gcc.gnu.org/snapshots.html'.
--- 21039,21046 ----
Contributing to GCC Development
*******************************
! If you would like to help pretest GCC releases to assure they work
! well, our current development sources are available by CVS (see
`http://gcc.gnu.org/cvs.html'). Source and binary snapshots are also
available for FTP; see `http://gcc.gnu.org/snapshots.html'.
*************** File: gcc.info, Node: Funding, Next: G
*** 21040,21046 ****
Funding Free Software
*********************
! If you want to have more free software a few years from now, it makes
sense for you to help encourage people to contribute funds for its
development. The most effective approach known is to encourage
commercial redistributors to donate.
--- 21060,21066 ----
Funding Free Software
*********************
! If you want to have more free software a few years from now, it makes
sense for you to help encourage people to contribute funds for its
development. The most effective approach known is to encourage
commercial redistributors to donate.
*************** File: gcc.info, Node: GNU Project, Nex
*** 21090,21096 ****
The GNU Project and GNU/Linux
*****************************
! The GNU Project was launched in 1984 to develop a complete Unix-like
operating system which is free software: the GNU system. (GNU is a
recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".)
Variants of the GNU operating system, which use the kernel Linux, are
--- 21110,21116 ----
The GNU Project and GNU/Linux
*****************************
! The GNU Project was launched in 1984 to develop a complete Unix-like
operating system which is free software: the GNU system. (GNU is a
recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".)
Variants of the GNU operating system, which use the kernel Linux, are
*************** GNU GENERAL PUBLIC LICENSE
*** 21117,21125 ****
Preamble
========
! The licenses for most software are designed to take away your freedom
! to share and change it. By contrast, the GNU General Public License is
! intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
--- 21137,21145 ----
Preamble
========
! The licenses for most software are designed to take away your
! freedom to share and change it. By contrast, the GNU General Public
! License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
*************** modification follow.
*** 21400,21406 ****
How to Apply These Terms to Your New Programs
=============================================
! If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these
terms.
--- 21420,21426 ----
How to Apply These Terms to Your New Programs
=============================================
! If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these
terms.
*************** GNU Free Documentation License
*** 21864,21870 ****
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 page:
--- 21884,21890 ----
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 page:
*************** File: gcc.info, Node: Contributors, Ne
*** 21898,21904 ****
Contributors to GCC
*******************
! The GCC project would like to thank its many contributors. Without
them the project would not have been nearly as successful as it has
been. Any omissions in this list are accidental. Feel free to contact
or if you have been left out or
--- 21918,21924 ----
Contributors to GCC
*******************
! The GCC project would like to thank its many contributors. Without
them the project would not have been nearly as successful as it has
been. Any omissions in this list are accidental. Feel free to contact
or if you have been left out or
*************** File: gcc.info, Node: Option Index, Ne
*** 22721,22728 ****
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.
--- 22741,22748 ----
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.
*************** look up both forms.
*** 23836,23841 ****
--- 23856,23862 ----
* print-search-dirs: Debugging Options.
* private_bundle: Darwin Options.
* pthread: RS/6000 and PowerPC Options.
+ * pthreads: SPARC Options.
* Q: Debugging Options.
* Qn: System V Options.
* Qy: System V Options.
*************** look up both forms.
*** 23876,23882 ****
* symbolic: Link Options.
* target-help <1>: Preprocessor Options.
* target-help: Overall Options.
! * threads: HPPA Options.
* time: Debugging Options.
* traditional <1>: Incompatibilities.
* traditional: C Dialect Options.
--- 23897,23904 ----
* symbolic: Link Options.
* target-help <1>: Preprocessor Options.
* target-help: Overall Options.
! * threads <1>: HPPA Options.
! * threads: SPARC Options.
* time: Debugging Options.
* traditional <1>: Incompatibilities.
* traditional: C Dialect Options.
*************** Keyword Index
*** 24739,24941 ****
Tag Table:
! Node: Top2117
! Node: G++ and GCC3800
! Node: Standards6388
! Node: Invoking GCC13580
! Node: Option Summary17226
! Node: Overall Options40985
! Node: Invoking G++47864
! Node: C Dialect Options49307
! Node: C++ Dialect Options59952
! Node: Objective-C Dialect Options77700
! Node: Language Independent Options81083
! Node: Warning Options82868
! Node: Debugging Options118314
! Node: Optimize Options138280
! Node: Preprocessor Options182341
! Ref: -MF190150
! Node: Assembler Options203192
! Node: Link Options203556
! Ref: Link Options-Footnote-1211632
! Node: Directory Options211968
! Node: Spec Files216957
! Node: Target Options235946
! Node: Submodel Options237244
! Node: M680x0 Options239000
! Node: M68hc1x Options245005
! Node: VAX Options246555
! Node: SPARC Options247088
! Node: ARM Options257380
! Node: MN10200 Options269245
! Node: MN10300 Options269764
! Node: M32R/D Options270812
! Node: M88K Options273268
! Node: RS/6000 and PowerPC Options281148
! Node: Darwin Options302313
! Node: RT Options304374
! Node: MIPS Options306040
! Node: i386 and x86-64 Options318373
! Node: HPPA Options333561
! Node: Intel 960 Options341441
! Node: DEC Alpha Options344381
! Node: DEC Alpha/VMS Options355392
! Node: H8/300 Options355766
! Node: SH Options356815
! Node: System V Options359128
! Node: TMS320C3x/C4x Options359943
! Node: V850 Options365452
! Node: ARC Options368377
! Node: NS32K Options369576
! Node: AVR Options374098
! Node: MCore Options375896
! Node: IA-64 Options376898
! Node: D30V Options379618
! Node: S/390 and zSeries Options380858
! Node: CRIS Options382790
! Node: MMIX Options387005
! Node: PDP-11 Options389470
! Node: Xstormy16 Options391292
! Node: FRV Options391565
! Node: Xtensa Options395510
! Node: Code Gen Options402238
! Node: Environment Variables418793
! Node: Running Protoize426430
! Node: C Implementation432783
! Node: Translation implementation433714
! Node: Environment implementation434149
! Node: Identifiers implementation434439
! Node: Characters implementation435052
! Node: Integers implementation436909
! Node: Floating point implementation437864
! Node: Arrays and pointers implementation439713
! Ref: Arrays and pointers implementation-Footnote-1441016
! Node: Hints implementation441142
! Node: Structures unions enumerations and bit-fields implementation442581
! Node: Qualifiers implementation443390
! Node: Preprocessing directives implementation443701
! Node: Library functions implementation445500
! Node: Architecture implementation445822
! Node: Locale-specific behavior implementation446387
! Node: C Extensions446682
! Node: Statement Exprs450799
! Node: Local Labels453850
! Node: Labels as Values455918
! Ref: Labels as Values-Footnote-1457980
! Node: Nested Functions458165
! Node: Constructing Calls462054
! Node: Typeof464132
! Node: Lvalues467305
! Node: Conditionals469608
! Node: Long Long470496
! Node: Complex471993
! Node: Hex Floats474561
! Node: Zero Length475587
! Node: Empty Structures478881
! Node: Variable Length479289
! Node: Variadic Macros482061
! Node: Escaped Newlines484449
! Node: Subscripting485278
! Node: Pointer Arith486001
! Node: Initializers486563
! Node: Compound Literals487049
! Node: Designated Inits489209
! Node: Case Ranges492880
! Node: Cast to Union493557
! Node: Mixed Declarations494649
! Node: Function Attributes495147
! Node: Attribute Syntax524256
! Node: Function Prototypes534630
! Node: C++ Comments536420
! Node: Dollar Signs536929
! Node: Character Escapes537384
! Node: Alignment537668
! Node: Variable Attributes538983
! Node: Type Attributes551301
! Node: Inline562732
! Node: Extended Asm567451
! Node: Constraints585416
! Node: Simple Constraints586256
! Node: Multi-Alternative592761
! Node: Modifiers594469
! Node: Machine Constraints596997
! Node: Asm Labels618262
! Node: Explicit Reg Vars619941
! Node: Global Reg Vars621392
! Node: Local Reg Vars625954
! Node: Alternate Keywords627751
! Node: Incomplete Enums629176
! Node: Function Names629929
! Node: Return Address632363
! Node: Vector Extensions635146
! Node: Other Builtins638699
! Node: Target Builtins654203
! Node: Alpha Built-in Functions654730
! Node: X86 Built-in Functions657716
! Node: PowerPC AltiVec Built-in Functions668126
! Node: Pragmas725933
! Node: ARM Pragmas726428
! Node: RS/6000 and PowerPC Pragmas727032
! Node: Darwin Pragmas727759
! Node: Solaris Pragmas728812
! Node: Tru64 Pragmas729372
! Node: Unnamed Fields730110
! Node: Thread-Local731199
! Node: C99 Thread-Local Edits733287
! Node: C++98 Thread-Local Edits735285
! Node: C++ Extensions738716
! Node: Min and Max740264
! Node: Volatiles741645
! Node: Restricted Pointers745013
! Node: Vague Linkage746592
! Node: C++ Interface750248
! Ref: C++ Interface-Footnote-1755333
! Node: Template Instantiation755472
! Node: Bound member functions762606
! Node: C++ Attributes764154
! Node: Java Exceptions765756
! Node: Deprecated Features767150
! Node: Backwards Compatibility769113
! Node: Objective-C770458
! Node: Executing code before main771035
! Node: What you can and what you cannot do in +load773670
! Node: Type encoding775833
! Node: Garbage Collection779082
! Node: Constant string objects781743
! Node: compatibility_alias784253
! Node: Compatibility785129
! Node: Gcov791713
! Node: Gcov Intro792179
! Node: Invoking Gcov794898
! Node: Gcov and Optimization803347
! Node: Gcov Data Files804781
! Node: Trouble809485
! Node: Actual Bugs811076
! Node: Cross-Compiler Problems811984
! Node: Interoperation813491
! Node: External Bugs823630
! Node: Incompatibilities825063
! Node: Fixed Headers833507
! Node: Standard Libraries835813
! Node: Disappointments837179
! Node: C++ Misunderstandings841670
! Node: Static Definitions842393
! Node: Temporaries843437
! Node: Copy Assignment845411
! Node: Protoize Caveats847230
! Node: Non-bugs851182
! Node: Warnings and Errors861047
! Node: Bugs862804
! Node: Bug Criteria863364
! Node: Bug Reporting865552
! Node: Service865930
! Node: Contributing866745
! Node: Funding867485
! Node: GNU Project869986
! Node: Copying870634
! Node: GNU Free Documentation License889836
! Node: Contributors912242
! Node: Option Index938924
! Node: Keyword Index1015036
End Tag Table
--- 24761,24963 ----
Tag Table:
! Node: Top2096
! Node: G++ and GCC3782
! Node: Standards6373
! Node: Invoking GCC13568
! Node: Option Summary17217
! Node: Overall Options41008
! Node: Invoking G++47890
! Node: C Dialect Options49336
! Node: C++ Dialect Options59984
! Node: Objective-C Dialect Options77735
! Node: Language Independent Options81120
! Node: Warning Options82908
! Node: Debugging Options118357
! Node: Optimize Options138326
! Node: Preprocessor Options182365
! Ref: -MF190177
! Node: Assembler Options203219
! Node: Link Options203586
! Ref: Link Options-Footnote-1211665
! Node: Directory Options212001
! Node: Spec Files216993
! Node: Target Options235986
! Node: Submodel Options237287
! Node: M680x0 Options239046
! Node: M68hc1x Options245054
! Node: VAX Options246607
! Node: SPARC Options247143
! Node: ARM Options258077
! Node: MN10200 Options269945
! Node: MN10300 Options270467
! Node: M32R/D Options271518
! Node: M88K Options273977
! Node: RS/6000 and PowerPC Options281860
! Node: Darwin Options303028
! Node: RT Options305092
! Node: MIPS Options306761
! Node: i386 and x86-64 Options319097
! Node: HPPA Options334288
! Node: Intel 960 Options342171
! Node: DEC Alpha Options345114
! Node: DEC Alpha/VMS Options356128
! Node: H8/300 Options356505
! Node: SH Options357557
! Node: System V Options359873
! Node: TMS320C3x/C4x Options360691
! Node: V850 Options366203
! Node: ARC Options369131
! Node: NS32K Options370333
! Node: AVR Options374858
! Node: MCore Options376659
! Node: IA-64 Options377664
! Node: D30V Options380387
! Node: S/390 and zSeries Options381630
! Node: CRIS Options383565
! Node: MMIX Options387783
! Node: PDP-11 Options390251
! Node: Xstormy16 Options392076
! Node: FRV Options392352
! Node: Xtensa Options396297
! Node: Code Gen Options403028
! Node: Environment Variables419586
! Node: Running Protoize427226
! Node: C Implementation433582
! Node: Translation implementation434516
! Node: Environment implementation434951
! Node: Identifiers implementation435244
! Node: Characters implementation435857
! Node: Integers implementation437714
! Node: Floating point implementation438669
! Node: Arrays and pointers implementation440518
! Ref: Arrays and pointers implementation-Footnote-1441821
! Node: Hints implementation441947
! Node: Structures unions enumerations and bit-fields implementation443386
! Node: Qualifiers implementation444195
! Node: Preprocessing directives implementation444506
! Node: Library functions implementation446305
! Node: Architecture implementation446630
! Node: Locale-specific behavior implementation447195
! Node: C Extensions447493
! Node: Statement Exprs451613
! Node: Local Labels454667
! Node: Labels as Values456738
! Ref: Labels as Values-Footnote-1458803
! Node: Nested Functions458988
! Node: Constructing Calls462880
! Node: Typeof464961
! Node: Lvalues468137
! Node: Conditionals470443
! Node: Long Long471334
! Node: Complex472833
! Node: Hex Floats475404
! Node: Zero Length476433
! Node: Empty Structures479730
! Node: Variable Length480141
! Node: Variadic Macros482916
! Node: Escaped Newlines485307
! Node: Subscripting486139
! Node: Pointer Arith486865
! Node: Initializers487430
! Node: Compound Literals487919
! Node: Designated Inits490082
! Node: Case Ranges493756
! Node: Cast to Union494436
! Node: Mixed Declarations495531
! Node: Function Attributes496032
! Node: Attribute Syntax525144
! Node: Function Prototypes535521
! Node: C++ Comments537314
! Node: Dollar Signs537826
! Node: Character Escapes538284
! Node: Alignment538571
! Node: Variable Attributes539889
! Node: Type Attributes552210
! Node: Inline563643
! Node: Extended Asm568365
! Node: Constraints586336
! Node: Simple Constraints587179
! Node: Multi-Alternative593687
! Node: Modifiers595398
! Node: Machine Constraints597929
! Node: Asm Labels619197
! Node: Explicit Reg Vars620879
! Node: Global Reg Vars622333
! Node: Local Reg Vars626898
! Node: Alternate Keywords628698
! Node: Incomplete Enums630125
! Node: Function Names630881
! Node: Return Address633318
! Node: Vector Extensions636104
! Node: Other Builtins639660
! Node: Target Builtins655167
! Node: Alpha Built-in Functions655697
! Node: X86 Built-in Functions658686
! Node: PowerPC AltiVec Built-in Functions669099
! Node: Pragmas726909
! Node: ARM Pragmas727407
! Node: RS/6000 and PowerPC Pragmas728014
! Node: Darwin Pragmas728744
! Node: Solaris Pragmas729800
! Node: Tru64 Pragmas730363
! Node: Unnamed Fields731104
! Node: Thread-Local732196
! Node: C99 Thread-Local Edits734287
! Node: C++98 Thread-Local Edits736288
! Node: C++ Extensions739722
! Node: Min and Max741274
! Node: Volatiles742658
! Node: Restricted Pointers746028
! Node: Vague Linkage747610
! Node: C++ Interface751269
! Ref: C++ Interface-Footnote-1756357
! Node: Template Instantiation756496
! Node: Bound member functions763633
! Node: C++ Attributes765184
! Node: Java Exceptions766789
! Node: Deprecated Features768186
! Node: Backwards Compatibility770152
! Node: Objective-C771500
! Node: Executing code before main772079
! Node: What you can and what you cannot do in +load774717
! Node: Type encoding776883
! Node: Garbage Collection780135
! Node: Constant string objects782799
! Node: compatibility_alias785312
! Node: Compatibility786191
! Node: Gcov792778
! Node: Gcov Intro793247
! Node: Invoking Gcov795969
! Node: Gcov and Optimization804418
! Node: Gcov Data Files805855
! Node: Trouble810562
! Node: Actual Bugs812156
! Node: Cross-Compiler Problems813064
! Node: Interoperation814574
! Node: External Bugs824716
! Node: Incompatibilities826152
! Node: Fixed Headers834599
! Node: Standard Libraries836908
! Node: Disappointments838278
! Node: C++ Misunderstandings842772
! Node: Static Definitions843498
! Node: Temporaries844545
! Node: Copy Assignment846528
! Node: Protoize Caveats848350
! Node: Non-bugs852305
! Node: Warnings and Errors862173
! Node: Bugs863933
! Node: Bug Criteria864496
! Node: Bug Reporting866687
! Node: Service867068
! Node: Contributing867886
! Node: Funding868629
! Node: GNU Project871133
! Node: Copying871784
! Node: GNU Free Documentation License890992
! Node: Contributors913401
! Node: Option Index940086
! Node: Keyword Index1016313
End Tag Table
diff -Nrc3pad gcc-3.3.4/gcc/doc/gccinstall.info gcc-3.3.5/gcc/doc/gccinstall.info
*** gcc-3.3.4/gcc/doc/gccinstall.info 2004-05-31 22:43:09.000000000 +0000
--- gcc-3.3.5/gcc/doc/gccinstall.info 2004-09-30 17:38:12.000000000 +0000
***************
*** 1,5 ****
! Ceci est le fichier Info doc/gccinstall.info, produit par Makeinfo
! version 4.6 à partir doc/install.texi.
Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
--- 1,5 ----
! This is doc/gccinstall.info, produced by makeinfo version 4.5 from
! doc/install.texi.
Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
*************** Target specification
*** 206,213 ****
Options specification
=====================
! 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.
--- 206,213 ----
Options specification
=====================
! 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.
*************** documentation pre-built for the unmodifi
*** 853,860 ****
Building a native compiler
==========================
! For a native build issue the command `make bootstrap'. This will build
! the entire GCC system, which includes the following steps:
* Build host tools necessary to build the compiler such as texinfo,
bison, gperf.
--- 853,860 ----
Building a native compiler
==========================
! For a native build issue the command `make bootstrap'. This will
! build the entire GCC system, which includes the following steps:
* Build host tools necessary to build the compiler such as texinfo,
bison, gperf.
*************** need to disable comparison in the `Makef
*** 914,920 ****
Building a cross compiler
=========================
! We recommend reading the crossgcc FAQ for information about building
cross compilers.
When building a cross compiler, it is not generally possible to do a
--- 914,920 ----
Building a cross compiler
=========================
! We recommend reading the crossgcc FAQ for information about building
cross compilers.
When building a cross compiler, it is not generally possible to do a
*************** performs the following steps:
*** 947,955 ****
Building in parallel
====================
! You can use `make bootstrap MAKE="make -j 2" -j 2', or just `make -j 2
! bootstrap' for GNU Make 3.79 and above, instead of `make bootstrap' to
! build GCC in parallel. 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
--- 947,955 ----
Building in parallel
====================
! You can use `make bootstrap MAKE="make -j 2" -j 2', or just `make -j
! 2 bootstrap' for GNU Make 3.79 and above, instead of `make bootstrap'
! to build GCC in parallel. 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.
*** 958,964 ****
Building the Ada compiler
=========================
! In order to build GNAT, the Ada compiler, you need a working GNAT
compiler (GNAT version 3.13 or later, or GCC version 3.1 or later),
since the Ada front end is written in Ada (with some GNAT-specific
extensions), and GNU make.
--- 958,964 ----
Building the Ada compiler
=========================
! In order to build GNAT, the Ada compiler, you need a working GNAT
compiler (GNAT version 3.13 or later, or GCC version 3.1 or later),
since the Ada front end is written in Ada (with some GNAT-specific
extensions), and GNU make.
*************** can be ignored.
*** 1053,1059 ****
How can I run the test suite on selected tests?
===============================================
! In order to run sets of tests selectively, there are targets `make
check-gcc' and `make check-g++' in the `gcc' subdirectory of the object
directory. You can also just run `make check' in a subdirectory of the
object directory.
--- 1053,1059 ----
How can I run the test suite on selected tests?
===============================================
! In order to run sets of tests selectively, there are targets `make
check-gcc' and `make check-g++' in the `gcc' subdirectory of the object
directory. You can also just run `make check' in a subdirectory of the
object directory.
*************** files, pipe the output of `make check' i
*** 1080,1086 ****
Additional testing for Java Class Libraries
===========================================
! The Mauve Project provides a suite of tests for the Java Class
Libraries. This suite can be run as part of libgcj testing by placing
the Mauve tree within the libjava testsuite at
`libjava/testsuite/libjava.mauve/mauve', or by specifying the location
--- 1080,1086 ----
Additional testing for Java Class Libraries
===========================================
! The Mauve Project provides a suite of tests for the Java Class
Libraries. This suite can be run as part of libgcj testing by placing
the Mauve tree within the libjava testsuite at
`libjava/testsuite/libjava.mauve/mauve', or by specifying the location
*************** tree within the libjava testsuite at
*** 1094,1100 ****
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
--- 1094,1100 ----
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
*************** problem in future releases.
*** 1122,1128 ****
Submitting test results
=======================
! 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 \
--- 1122,1128 ----
Submitting test results
=======================
! 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 \
*************** Compiler Collection on your machine.
*** 1307,1313 ****
alpha*-*-*
==========
! This section contains general configuration information for all
alpha-based platforms using ELF (in particular, ignore this section for
DEC OSF/1, Digital UNIX and Tru64 UNIX). In addition to reading this
section, please read all other sections that match your target.
--- 1307,1313 ----
alpha*-*-*
==========
! This section contains general configuration information for all
alpha-based platforms using ELF (in particular, ignore this section for
DEC OSF/1, Digital UNIX and Tru64 UNIX). In addition to reading this
section, please read all other sections that match your target.
*************** of which is incorrect linking of shared
*** 1319,1326 ****
alpha*-dec-osf*
===============
! Systems using processors that implement the DEC Alpha architecture and
! are running the DEC/Compaq Unix (DEC OSF/1, Digital UNIX, or Compaq
Tru64 UNIX) operating system, for example the DEC Alpha AXP systems.
As of GCC 3.2, versions before `alpha*-dec-osf4' are no longer
--- 1319,1326 ----
alpha*-dec-osf*
===============
! Systems using processors that implement the DEC Alpha architecture
! and are running the DEC/Compaq Unix (DEC OSF/1, Digital UNIX, or Compaq
Tru64 UNIX) operating system, for example the DEC Alpha AXP systems.
As of GCC 3.2, versions before `alpha*-dec-osf4' are no longer
*************** provide a fix shortly.
*** 1397,1403 ****
alphaev5-cray-unicosmk*
=======================
! Cray T3E systems running Unicos/Mk.
This port is incomplete and has many known bugs. We hope to improve
the support for this target soon. Currently, only the C front end is
--- 1397,1403 ----
alphaev5-cray-unicosmk*
=======================
! Cray T3E systems running Unicos/Mk.
This port is incomplete and has many known bugs. We hope to improve
the support for this target soon. Currently, only the C front end is
*************** failure.
*** 1421,1433 ****
arc-*-elf
=========
! Argonaut ARC processor. This configuration is intended for embedded
systems.
arm-*-aout
==========
! This configuration is obsoleted in GCC 3.3.
Advanced RISC Machines ARM-family processors. These are often used
in embedded applications. There are no standard Unix configurations.
--- 1421,1433 ----
arc-*-elf
=========
! Argonaut ARC processor. This configuration is intended for embedded
systems.
arm-*-aout
==========
! This configuration is obsoleted in GCC 3.3.
Advanced RISC Machines ARM-family processors. These are often used
in embedded applications. There are no standard Unix configurations.
*************** particular configuration.
*** 1440,1456 ****
arm-*-elf
=========
! This configuration is intended for embedded systems.
arm*-*-linux-gnu
================
! We require GNU binutils 2.10 or newer.
avr
===
! ATMEL AVR-family micro controllers. These are used in embedded
applications. There are no standard Unix configurations. *Note AVR
Options: (gcc)AVR Options, for the list of supported MCU types.
--- 1440,1456 ----
arm-*-elf
=========
! This configuration is intended for embedded systems.
arm*-*-linux-gnu
================
! We require GNU binutils 2.10 or newer.
avr
===
! ATMEL AVR-family micro controllers. These are used in embedded
applications. There are no standard Unix configurations. *Note AVR
Options: (gcc)AVR Options, for the list of supported MCU types.
*************** tools can also be obtained from:
*** 1475,1483 ****
c4x
===
! Texas Instruments TMS320C3x and TMS320C4x Floating Point Digital Signal
! Processors. These are used in embedded applications. There are no
! standard Unix configurations. *Note TMS320C3x/C4x Options:
(gcc)TMS320C3x/C4x Options, for the list of supported MCU types.
GCC can be configured as a cross compiler for both the C3x and C4x
--- 1475,1483 ----
c4x
===
! Texas Instruments TMS320C3x and TMS320C4x Floating Point Digital
! Signal Processors. These are used in embedded applications. There are
! no standard Unix configurations. *Note TMS320C3x/C4x Options:
(gcc)TMS320C3x/C4x Options, for the list of supported MCU types.
GCC can be configured as a cross compiler for both the C3x and C4x
*************** tools can also be obtained from:
*** 1492,1498 ****
CRIS
====
! CRIS is the CPU architecture in Axis Communications ETRAX
system-on-a-chip series. These are used in embedded applications.
*Note CRIS Options: (gcc)CRIS Options, for a list of CRIS-specific
--- 1492,1498 ----
CRIS
====
! CRIS is the CPU architecture in Axis Communications ETRAX
system-on-a-chip series. These are used in embedded applications.
*Note CRIS Options: (gcc)CRIS Options, for a list of CRIS-specific
*************** information about this platform is avail
*** 1522,1528 ****
DOS
===
! Please have a look at our binaries page.
You cannot install GCC by itself on MSDOS; it will not compile under
any MSDOS compiler except itself. You need to get the complete
--- 1522,1528 ----
DOS
===
! Please have a look at our binaries page.
You cannot install GCC by itself on MSDOS; it will not compile under
any MSDOS compiler except itself. You need to get the complete
*************** and includes all the necessary compilati
*** 1532,1545 ****
dsp16xx
=======
! A port to the AT&T DSP1610 family of processors.
*-*-freebsd*
============
! The version of binutils installed in `/usr/bin' is known to work unless
! otherwise specified in any per-architecture notes. However, binutils
! 2.12.1 or greater is known to improve overall testsuite results.
Support for FreeBSD 1 was discontinued in GCC 3.2.
--- 1532,1546 ----
dsp16xx
=======
! A port to the AT&T DSP1610 family of processors.
*-*-freebsd*
============
! The version of binutils installed in `/usr/bin' is known to work
! unless otherwise specified in any per-architecture notes. However,
! binutils 2.12.1 or greater is known to improve overall testsuite
! results.
Support for FreeBSD 1 was discontinued in GCC 3.2.
*************** least, both boehm-gc and libffi.
*** 1579,1585 ****
h8300-hms
=========
! Renesas H8/300 series of processors.
Please have a look at our binaries page.
--- 1580,1586 ----
h8300-hms
=========
! Renesas H8/300 series of processors.
Please have a look at our binaries page.
*************** are no longer a multiple of 2 bytes.
*** 1591,1597 ****
hppa*-hp-hpux*
==============
! Support for HP-UX versions 7, 8, and 9 is obsoleted in GCC 3.3.
We _highly_ recommend using gas/binutils 2.8 or newer on all hppa
platforms; you may encounter a variety of problems when using the HP
--- 1592,1598 ----
hppa*-hp-hpux*
==============
! Support for HP-UX versions 7, 8, and 9 is obsoleted in GCC 3.3.
We _highly_ recommend using gas/binutils 2.8 or newer on all hppa
platforms; you may encounter a variety of problems when using the HP
*************** default scheduling model is desired.
*** 1623,1629 ****
hppa*-hp-hpux9
==============
! Support for this system is obsoleted in GCC 3.3.
The HP assembler has major problems on this platform. We've tried
to work around the worst of the problems. However, those workarounds
--- 1624,1630 ----
hppa*-hp-hpux9
==============
! Support for this system is obsoleted in GCC 3.3.
The HP assembler has major problems on this platform. We've tried
to work around the worst of the problems. However, those workarounds
*************** and `SHELL' to `/bin/ksh' in your enviro
*** 1638,1644 ****
hppa*-hp-hpux10
===============
! For hpux10.20, we _highly_ recommend you pick up the latest sed patch
`PHCO_19798' from HP. HP has two sites which provide patches free of
charge:
--- 1639,1645 ----
hppa*-hp-hpux10
===============
! For hpux10.20, we _highly_ recommend you pick up the latest sed patch
`PHCO_19798' from HP. HP has two sites which provide patches free of
charge:
*************** be able to continue by saying `make all'
*** 1657,1666 ****
hppa*-hp-hpux11
===============
! GCC 3.0 and up support HP-UX 11. On 64-bit capable systems, there are
! two distinct ports. The `hppa2.0w-hp-hpux11*' port generates code for
! the 32-bit pa-risc runtime architecture. It uses the HP linker. The
! `hppa64-hp-hpux11*' port generates 64-bit code for the pa-risc 2.0
architecture. The script config.guess now selects the port type based
on the type compiler detected during configuration. You must set your
`PATH' or define `CC' so that configure finds an appropriate compiler
--- 1658,1667 ----
hppa*-hp-hpux11
===============
! GCC 3.0 and up support HP-UX 11. On 64-bit capable systems, there
! are two distinct ports. The `hppa2.0w-hp-hpux11*' port generates code
! for the 32-bit pa-risc runtime architecture. It uses the HP linker.
! The `hppa64-hp-hpux11*' port generates 64-bit code for the pa-risc 2.0
architecture. The script config.guess now selects the port type based
on the type compiler detected during configuration. You must set your
`PATH' or define `CC' so that configure finds an appropriate compiler
*************** between traditional and ISO C.
*** 1748,1760 ****
i370-*-*
========
! This port is very preliminary and has many known bugs. We hope to have
! a higher-quality port for this machine soon.
*-*-linux-gnu
=============
! Versions of libstdc++-v3 starting with 3.2.1 require bugfixes present
in glibc 2.2.5 and later. More information is available in the
libstdc++-v3 documentation.
--- 1749,1761 ----
i370-*-*
========
! This port is very preliminary and has many known bugs. We hope to
! have a higher-quality port for this machine soon.
*-*-linux-gnu
=============
! Versions of libstdc++-v3 starting with 3.2.1 require bugfixes present
in glibc 2.2.5 and later. More information is available in the
libstdc++-v3 documentation.
*************** You can use glibc 2.2.3 with GCC 3.0, ju
*** 1775,1789 ****
i?86-*-linux*aout
=================
! Use this configuration to generate `a.out' binaries on Linux-based GNU
! systems. This configuration is being superseded. You must use
gas/binutils version 2.5.2 or later.
i?86-*-linux*
=============
! As of GCC 3.3, binutils 2.13.1 or later is required for this platform.
! See bug 10877 for more information.
If you receive Signal 11 errors when building on GNU/Linux, then it
is possible you have a hardware problem. Further information on this
--- 1776,1790 ----
i?86-*-linux*aout
=================
! Use this configuration to generate `a.out' binaries on Linux-based
! GNU systems. This configuration is being superseded. You must use
gas/binutils version 2.5.2 or later.
i?86-*-linux*
=============
! As of GCC 3.3, binutils 2.13.1 or later is required for this
! platform. See bug 10877 for more information.
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 www.bitwizard.nl.
*** 1792,1804 ****
i?86-*-sco
==========
! Compilation with RCC is recommended. Also, it may be a good idea to
link with GNU malloc instead of the malloc that comes with the system.
i?86-*-sco3.2v5*
================
! Use this for the SCO OpenServer Release 5 family of operating systems.
Unlike earlier versions of GCC, the ability to generate COFF with
this target is no longer provided.
--- 1793,1806 ----
i?86-*-sco
==========
! Compilation with RCC is recommended. Also, it may be a good idea to
link with GNU malloc instead of the malloc that comes with the system.
i?86-*-sco3.2v5*
================
! Use this for the SCO OpenServer Release 5 family of operating
! systems.
Unlike earlier versions of GCC, the ability to generate COFF with
this target is no longer provided.
*************** for bootstrapping this version.
*** 1840,1847 ****
i?86-*-udk
==========
! This target emulates the SCO Universal Development Kit and requires that
! package be installed. (If it is installed, you will have a
`/udk/usr/ccs/bin/cc' file present.) It's very much like the
`i?86-*-unixware7*' target but is meant to be used when hosting on a
system where UDK isn't the default compiler such as OpenServer 5 or
--- 1842,1849 ----
i?86-*-udk
==========
! This target emulates the SCO Universal Development Kit and requires
! that package be installed. (If it is installed, you will have a
`/udk/usr/ccs/bin/cc' file present.) It's very much like the
`i?86-*-unixware7*' target but is meant to be used when hosting on a
system where UDK isn't the default compiler such as OpenServer 5 or
*************** tools you may have installed.
*** 1870,1876 ****
ia64-*-linux
============
! IA-64 processor (also known as IPF, or Itanium Processor Family)
running GNU/Linux.
The toolchain is not completely finished, so requirements will
--- 1872,1878 ----
ia64-*-linux
============
! IA-64 processor (also known as IPF, or Itanium Processor Family)
running GNU/Linux.
The toolchain is not completely finished, so requirements will
*************** are expected.
*** 1892,1900 ****
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.
The GCC libunwind library has not been ported to HPUX. This means
that for GCC versions 3.2.3 and earlier, `--enable-libunwind-exceptions'
--- 1894,1902 ----
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.
The GCC libunwind library has not been ported to HPUX. This means
that for GCC versions 3.2.3 and earlier, `--enable-libunwind-exceptions'
*************** is required to build GCC. For GCC 3.3 an
*** 1903,1909 ****
*-lynx-lynxos
=============
! Support for SPARC LynxOS is obsoleted in GCC 3.3.
LynxOS 2.2 and earlier comes with GCC 1.x already installed as
`/bin/gcc'. You should compile with this instead of `/bin/cc'. You
--- 1905,1911 ----
*-lynx-lynxos
=============
! Support for SPARC LynxOS is obsoleted in GCC 3.3.
LynxOS 2.2 and earlier comes with GCC 1.x already installed as
`/bin/gcc'. You should compile with this instead of `/bin/cc'. You
*************** installed tools, which produce `a.out' f
*** 1915,1921 ****
*-ibm-aix*
==========
! Support for AIX versions 1, 2, and 3 is obsoleted in GCC 3.3.
AIX Make frequently has problems with GCC makefiles. GNU Make 3.76
or newer is recommended to build on this platform.
--- 1917,1923 ----
*-ibm-aix*
==========
! Support for AIX versions 1, 2, and 3 is obsoleted in GCC 3.3.
AIX Make frequently has problems with GCC makefiles. GNU Make 3.76
or newer is recommended to build on this platform.
*************** using the configure option `--with-cpu-C
*** 2016,2022 ****
ip2k-*-elf
==========
! Ubicom IP2022 micro controller. This configuration is intended for
embedded systems. There are no standard Unix configurations.
Use `configure --target=ip2k-elf --enable-languages=c' to configure
--- 2018,2024 ----
ip2k-*-elf
==========
! Ubicom IP2022 micro controller. This configuration is intended for
embedded systems. There are no standard Unix configurations.
Use `configure --target=ip2k-elf --enable-languages=c' to configure
*************** GCC.
*** 2025,2037 ****
m32r-*-elf
==========
! Renesas M32R processor. This configuration is intended for embedded
systems.
m68000-hp-bsd
=============
! Support for this system is obsoleted in GCC 3.3.
HP 9000 series 200 running BSD. Note that the C compiler that comes
with this system cannot compile GCC; contact to get
--- 2027,2039 ----
m32r-*-elf
==========
! Renesas M32R processor. This configuration is intended for embedded
systems.
m68000-hp-bsd
=============
! Support for this system is obsoleted in GCC 3.3.
HP 9000 series 200 running BSD. Note that the C compiler that comes
with this system cannot compile GCC; contact to get
*************** binaries of GCC for bootstrapping.
*** 2040,2058 ****
m6811-elf
=========
! Motorola 68HC11 family micro controllers. These are used in embedded
applications. There are no standard Unix configurations.
m6812-elf
=========
! Motorola 68HC12 family micro controllers. These are used in embedded
applications. There are no standard Unix configurations.
m68k-att-sysv
=============
! Support for this system is obsoleted in GCC 3.3.
AT&T 3b1, a.k.a. 7300 PC. This version of GCC cannot be compiled
with the system C compiler, which is too buggy. You will need to get a
--- 2042,2060 ----
m6811-elf
=========
! Motorola 68HC11 family micro controllers. These are used in embedded
applications. There are no standard Unix configurations.
m6812-elf
=========
! Motorola 68HC12 family micro controllers. These are used in embedded
applications. There are no standard Unix configurations.
m68k-att-sysv
=============
! Support for this system is obsoleted in GCC 3.3.
AT&T 3b1, a.k.a. 7300 PC. This version of GCC cannot be compiled
with the system C compiler, which is too buggy. You will need to get a
*************** available from the OSU-CIS archive, at
*** 2063,2069 ****
m68k-crds-unos
==============
! Support for this system is obsoleted in GCC 3.3.
Use `configure unos' for building on Unos.
--- 2065,2071 ----
m68k-crds-unos
==============
! Support for this system is obsoleted in GCC 3.3.
Use `configure unos' for building on Unos.
*************** library and linking from that library.
*** 2099,2107 ****
m68k-hp-hpux
============
! HP 9000 series 300 or 400 running HP-UX. HP-UX version 8.0 has a bug in
! the assembler that prevents compilation of GCC. This bug manifests
! itself during the first stage of compilation, while building
`libgcc2.a':
_floatdisf
--- 2101,2109 ----
m68k-hp-hpux
============
! HP 9000 series 300 or 400 running HP-UX. HP-UX version 8.0 has a
! bug in the assembler that prevents compilation of GCC. This bug
! manifests itself during the first stage of compilation, while building
`libgcc2.a':
_floatdisf
*************** script to look like:
*** 2147,2153 ****
m68k-ncr-*
==========
! Support for this system is obsoleted in GCC 3.3.
On the Tower models 4N0 and 6N0, by default a process is not allowed
to have more than one megabyte of memory. GCC cannot compile itself
--- 2149,2155 ----
m68k-ncr-*
==========
! Support for this system is obsoleted in GCC 3.3.
On the Tower models 4N0 and 6N0, by default a process is not allowed
to have more than one megabyte of memory. GCC cannot compile itself
*************** line to the configuration file:
*** 2161,2167 ****
m68k-sun
========
! Support for this system is obsoleted in GCC 3.3.
Sun 3. We do not provide a configuration file to use the Sun FPA by
default, because programs that establish signal handlers for floating
--- 2163,2169 ----
m68k-sun
========
! Support for this system is obsoleted in GCC 3.3.
Sun 3. We do not provide a configuration file to use the Sun FPA by
default, because programs that establish signal handlers for floating
*************** point traps inherently cannot work with
*** 2170,2183 ****
m68k-sun-sunos4.1.1
===================
! Support for this system is obsoleted in GCC 3.3.
It is reported that you may need the GNU assembler on this platform.
mips-*-*
========
! If on a MIPS system you get an error message saying "does not have gp
sections for all it's [sic] sectons [sic]", don't worry about it. This
happens whenever you use GAS with the MIPS linker, but there is not
really anything wrong, and it is okay to use the output file. You can
--- 2172,2185 ----
m68k-sun-sunos4.1.1
===================
! Support for this system is obsoleted in GCC 3.3.
It is reported that you may need the GNU assembler on this platform.
mips-*-*
========
! If on a MIPS system you get an error message saying "does not have gp
sections for all it's [sic] sectons [sic]", don't worry about it. This
happens whenever you use GAS with the MIPS linker, but there is not
really anything wrong, and it is okay to use the output file. You can
*************** expected in future releases.
*** 2196,2203 ****
mips-sgi-irix5
==============
! This configuration has considerable problems, which will be fixed in a
! future release.
In order to compile GCC on an SGI running IRIX 5, the
"compiler_dev.hdr" subsystem must be installed from the IDO CD-ROM
--- 2198,2205 ----
mips-sgi-irix5
==============
! This configuration has considerable problems, which will be fixed in
! a future release.
In order to compile GCC on an SGI running IRIX 5, the
"compiler_dev.hdr" subsystem must be installed from the IDO CD-ROM
*************** vendor supplied `make' program; however,
*** 2236,2245 ****
mips-sgi-irix6
==============
! If you are using IRIX `cc' as your bootstrap compiler, you must ensure
! that the N32 ABI is in use. To test this, compile a simple C file with
! `cc' and then run `file' on the resulting object file. The output
! should look like:
test.o: ELF N32 MSB ...
--- 2238,2247 ----
mips-sgi-irix6
==============
! If you are using IRIX `cc' as your bootstrap compiler, you must
! ensure that the N32 ABI is in use. To test this, compile a simple C
! file with `cc' and then run `file' on the resulting object file. The
! output should look like:
test.o: ELF N32 MSB ...
*************** IRIX platforms.
*** 2322,2334 ****
powerpc-*-*
===========
! You can specify a default version for the `-mcpu=CPU_TYPE' switch by
using the configure option `--with-cpu-CPU_TYPE'.
powerpc-*-darwin*
=================
! PowerPC running Darwin (Mac OS X kernel).
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
--- 2324,2336 ----
powerpc-*-*
===========
! You can specify a default version for the `-mcpu=CPU_TYPE' switch by
using the configure option `--with-cpu-CPU_TYPE'.
powerpc-*-darwin*
=================
! PowerPC running Darwin (Mac OS X kernel).
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
*************** are generally specific to Mac programmin
*** 2351,2419 ****
powerpc-*-elf, powerpc-*-sysv4
==============================
! PowerPC system in big endian mode, running System V.4.
powerpc-*-linux-gnu*
====================
! You will need binutils 2.13.90.0.10 or newer for a working GCC.
powerpc-*-netbsd*
=================
! PowerPC system in big endian mode running NetBSD. To build the
documentation you will need Texinfo version 4.2 (NetBSD 1.5.1 included
Texinfo version 3.12).
powerpc-*-eabiaix
=================
! Embedded PowerPC system in big endian mode with `-mcall-aix' selected as
! the default.
powerpc-*-eabisim
=================
! Embedded PowerPC system in big endian mode for use in running under the
! PSIM simulator.
powerpc-*-eabi
==============
! Embedded PowerPC system in big endian mode.
powerpcle-*-elf, powerpcle-*-sysv4
==================================
! PowerPC system in little endian mode, running System V.4.
powerpcle-*-eabisim
===================
! Embedded PowerPC system in little endian mode for use in running under
! the PSIM simulator.
powerpcle-*-eabi
================
! Embedded PowerPC system in little endian mode.
s390-*-linux*
=============
! S/390 system running Linux for S/390.
s390x-*-linux*
==============
! zSeries system (64-bit) running Linux for zSeries.
*-*-solaris2*
=============
! Sun does not ship a C compiler with Solaris 2. To bootstrap and install
! GCC you first have to install a pre-built compiler, see our binaries
! page for details.
The Solaris 2 `/bin/sh' will often fail to configure `libstdc++-v3',
`boehm-gc' or `libjava'. We therefore recommend to use the following
--- 2353,2421 ----
powerpc-*-elf, powerpc-*-sysv4
==============================
! PowerPC system in big endian mode, running System V.4.
powerpc-*-linux-gnu*
====================
! You will need binutils 2.13.90.0.10 or newer for a working GCC.
powerpc-*-netbsd*
=================
! PowerPC system in big endian mode running NetBSD. To build the
documentation you will need Texinfo version 4.2 (NetBSD 1.5.1 included
Texinfo version 3.12).
powerpc-*-eabiaix
=================
! Embedded PowerPC system in big endian mode with `-mcall-aix'
! selected as the default.
powerpc-*-eabisim
=================
! Embedded PowerPC system in big endian mode for use in running under
! the PSIM simulator.
powerpc-*-eabi
==============
! Embedded PowerPC system in big endian mode.
powerpcle-*-elf, powerpcle-*-sysv4
==================================
! PowerPC system in little endian mode, running System V.4.
powerpcle-*-eabisim
===================
! Embedded PowerPC system in little endian mode for use in running
! under the PSIM simulator.
powerpcle-*-eabi
================
! Embedded PowerPC system in little endian mode.
s390-*-linux*
=============
! S/390 system running Linux for S/390.
s390x-*-linux*
==============
! zSeries system (64-bit) running Linux for zSeries.
*-*-solaris2*
=============
! Sun does not ship a C compiler with Solaris 2. To bootstrap and
! install GCC you first have to install a pre-built compiler, see our
! binaries page for details.
The Solaris 2 `/bin/sh' will often fail to configure `libstdc++-v3',
`boehm-gc' or `libjava'. We therefore recommend to use the following
*************** defined by C89).
*** 2467,2473 ****
sparc-sun-solaris2*
===================
! When GCC is configured to use binutils 2.11.2 or later the binaries
produced are smaller than the ones produced using Sun's native tools;
this difference is quite significant for binaries containing debugging
information.
--- 2469,2475 ----
sparc-sun-solaris2*
===================
! When GCC is configured to use binutils 2.11.2 or later the binaries
produced are smaller than the ones produced using Sun's native tools;
this difference is quite significant for binaries containing debugging
information.
*************** use it to bootstrap the final compiler.
*** 2504,2514 ****
sparc-sun-solaris2.7
====================
! Sun patch 107058-01 (1999-01-13) for Solaris 7/SPARC triggers a bug in
! the dynamic linker. This problem (Sun bug 4210064) affects GCC 2.8 and
! later, including all EGCS releases. Sun formerly recommended 107058-01
! for all Solaris 7 users, but around 1999-09-01 it started to recommend
! it only for people who use Sun's compilers.
Here are some workarounds to this problem:
* Do not install Sun patch 107058-01 until after Sun releases a
--- 2506,2516 ----
sparc-sun-solaris2.7
====================
! Sun patch 107058-01 (1999-01-13) for Solaris 7/SPARC triggers a bug
! in the dynamic linker. This problem (Sun bug 4210064) affects GCC 2.8
! and later, including all EGCS releases. Sun formerly recommended
! 107058-01 for all Solaris 7 users, but around 1999-09-01 it started to
! recommend it only for people who use Sun's compilers.
Here are some workarounds to this problem:
* Do not install Sun patch 107058-01 until after Sun releases a
*************** shared version of libgcc. A typical erro
*** 2546,2552 ****
sparc-sun-sunos4*
=================
! Support for this system is obsoleted in GCC 3.3.
A bug in the SunOS 4 linker will cause it to crash when linking
`-fPIC' compiled objects (and will therefore not allow you to build
--- 2548,2554 ----
sparc-sun-sunos4*
=================
! Support for this system is obsoleted in GCC 3.3.
A bug in the SunOS 4 linker will cause it to crash when linking
`-fPIC' compiled objects (and will therefore not allow you to build
*************** or `genoutput' manually and then retryin
*** 2564,2570 ****
sparc-unknown-linux-gnulibc1
============================
! Support for this system is obsoleted in GCC 3.3.
It has been reported that you might need binutils 2.8.1.0.23 for
this platform, too.
--- 2566,2572 ----
sparc-unknown-linux-gnulibc1
============================
! Support for this system is obsoleted in GCC 3.3.
It has been reported that you might need binutils 2.8.1.0.23 for
this platform, too.
*************** this platform, too.
*** 2572,2586 ****
sparc-*-linux*
==============
! GCC versions 3.0 and higher require binutils 2.11.2 and glibc 2.2.4 or
! newer on this platform. All earlier binutils and glibc releases
mishandled unaligned relocations on `sparc-*-*' targets.
sparc64-*-solaris2*
===================
! The following compiler flags must be specified in the configure step in
! order to bootstrap this target with the Sun compiler:
% CC="cc -xildoff -xarch=v9" SRCDIR/configure [OPTIONS] [TARGET]
--- 2574,2588 ----
sparc-*-linux*
==============
! GCC versions 3.0 and higher require binutils 2.11.2 and glibc 2.2.4
! or newer on this platform. All earlier binutils and glibc releases
mishandled unaligned relocations on `sparc-*-*' targets.
sparc64-*-solaris2*
===================
! The following compiler flags must be specified in the configure step
! in order to bootstrap this target with the Sun compiler:
% CC="cc -xildoff -xarch=v9" SRCDIR/configure [OPTIONS] [TARGET]
*************** specifies the SPARC-V9 architecture to t
*** 2590,2601 ****
sparcv9-*-solaris2*
===================
! This is a synonym for sparc64-*-solaris2*.
*-*-sysv*
=========
! On System V release 3, you may get this error message while linking:
ld fatal: failed to write symbol name SOMETHING
in strings table for file WHATEVER
--- 2592,2603 ----
sparcv9-*-solaris2*
===================
! This is a synonym for sparc64-*-solaris2*.
*-*-sysv*
=========
! On System V release 3, you may get this error message while linking:
ld fatal: failed to write symbol name SOMETHING
in strings table for file WHATEVER
*************** which have bugs.
*** 2622,2643 ****
vax-dec-ultrix
==============
! Don't try compiling with VAX C (`vcc'). It produces incorrect code in
! some cases (for example, when `alloca' is used).
x86_64-*-*, amd64-*-*
=====================
! 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).
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.
--- 2624,2646 ----
vax-dec-ultrix
==============
! Don't try compiling with VAX C (`vcc'). It produces incorrect code
! in some cases (for example, when `alloca' is used).
x86_64-*-*, amd64-*-*
=====================
! 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).
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.
*************** replace the default header file.
*** 2651,2657 ****
xtensa-*-linux*
===============
! 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
--- 2654,2660 ----
xtensa-*-linux*
===============
! 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.
*** 2660,2666 ****
Microsoft Windows (32-bit)
==========================
! A port of GCC 2.95.2 and 3.x is included with the Cygwin environment.
Current (as of early 2001) snapshots of GCC will build under Cygwin
without modification.
--- 2663,2669 ----
Microsoft Windows (32-bit)
==========================
! A port of GCC 2.95.2 and 3.x is included with the Cygwin environment.
Current (as of early 2001) snapshots of GCC will build under Cygwin
without modification.
*************** are no plans to make it do so.
*** 2671,2679 ****
OS/2
====
! GCC does not currently support OS/2. However, Andrew Zabolotny has been
! working on a generic OS/2 port with pgcc. The current code can be found
! at http://www.goof.com/pcg/os2/.
An older copy of GCC 2.8.1 is included with the EMX tools available
at ftp://ftp.leo.org/pub/comp/os/os2/leo/devtools/emx+gcc/.
--- 2674,2682 ----
OS/2
====
! GCC does not currently support OS/2. However, Andrew Zabolotny has
! been working on a generic OS/2 port with pgcc. The current code can be
! found at http://www.goof.com/pcg/os2/.
An older copy of GCC 2.8.1 is included with the EMX tools available
at ftp://ftp.leo.org/pub/comp/os/os2/leo/devtools/emx+gcc/.
*************** at ftp://ftp.leo.org/pub/comp/os/os2/leo
*** 2681,2690 ****
Older systems
=============
! 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.
Starting with GCC 3.1, each release has a list of "obsoleted"
systems. Support for these systems is still present in that release,
--- 2684,2693 ----
Older systems
=============
! 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.
Starting with GCC 3.1, each release has a list of "obsoleted"
systems. Support for these systems is still present in that release,
*************** the GCC texinfo manual.
*** 2723,2730 ****
all ELF targets (SVR4, Solaris 2, etc.)
=======================================
! C++ support is significantly better on ELF targets if you use the GNU
! linker; duplicate copies of inlines, vtables and template
instantiations will be discarded automatically.
--- 2726,2733 ----
all ELF targets (SVR4, Solaris 2, etc.)
=======================================
! C++ support is significantly better on ELF targets if you use the
! GNU linker; duplicate copies of inlines, vtables and template
instantiations will be discarded automatically.
*************** GNU Free Documentation License
*** 3725,3731 ****
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 page:
--- 3728,3734 ----
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 page:
*************** Concept Index
*** 3787,3887 ****
Tag Table:
! Node: Top1717
! Node: Installing GCC2275
! Node: Downloading the source3768
! Node: Configuration5368
! Ref: with-gnu-as18138
! Ref: with-as19410
! Ref: with-gnu-ld20371
! Node: Building34928
! Node: Testing44160
! Node: Final install49539
! Node: Binaries54225
! Node: Specific55973
! Ref: alpha*-*-*56256
! Ref: alpha*-dec-osf*56745
! Ref: alphaev5-cray-unicosmk*60427
! Ref: arc-*-elf61374
! Ref: arm-*-aout61474
! Ref: arm-*-elf61888
! Ref: arm*-*-linux-gnu61963
! Ref: avr62038
! Ref: c4x62718
! Ref: cris63316
! Ref: dos64298
! Ref: dsp16xx64621
! Ref: *-*-freebsd*64688
! Ref: h8300-hms66855
! Ref: hppa*-hp-hpux*67207
! Ref: hppa*-hp-hpux968553
! Ref: hppa*-hp-hpux1069130
! Ref: hppa*-hp-hpux1169838
! Ref: i370-*-*74486
! Ref: *-*-linux-gnu74623
! Ref: ix86-*-linux*aout75612
! Ref: ix86-*-linux*75822
! Ref: ix86-*-sco76135
! Ref: ix86-*-sco3.2v5*76299
! Ref: ix86-*-udk78544
! Ref: ia64-*-linux79908
! Ref: ia64-*-hpux*80896
! Ref: *-lynx-lynxos81325
! Ref: *-ibm-aix*81802
! Ref: ip2k-*-elf86827
! Ref: m32r-*-elf87058
! Ref: m68000-hp-bsd87160
! Ref: m6811-elf87416
! Ref: m6812-elf87566
! Ref: m68k-att-sysv87716
! Ref: m68k-crds-unos88076
! Ref: m68k-hp-hpux89537
! Ref: m68k-ncr-*91550
! Ref: m68k-sun91945
! Ref: m68k-sun-sunos4.1.192206
! Ref: mips-*-*92370
! Ref: mips-sgi-irix593231
! Ref: mips-sgi-irix695212
! Ref: powerpc*-*-*98998
! Ref: powerpc-*-darwin*99143
! Ref: powerpc-*-elf100088
! Ref: powerpc-*-linux-gnu*100207
! Ref: powerpc-*-netbsd*100315
! Ref: powerpc-*-eabiaix100511
! Ref: powerpc-*-eabisim100635
! Ref: powerpc-*-eabi100761
! Ref: powerpcle-*-elf100837
! Ref: powerpcle-*-eabisim100967
! Ref: powerpcle-*-eabi101100
! Ref: s390-*-linux*101183
! Ref: s390x-*-linux*101251
! Ref: *-*-solaris2*101334
! Ref: sparc-sun-solaris2*103789
! Ref: sparc-sun-solaris2.7105510
! Ref: sparc-sun-sunos4*107580
! Ref: sparc-unknown-linux-gnulibc1108244
! Ref: sparc-*-linux*108442
! Ref: sparc64-*-solaris2*108667
! Ref: sparcv9-*-solaris2*109043
! Ref: #*-*-sysv*109128
! Ref: vax-dec-ultrix110089
! Ref: x86_64-*-*110241
! Ref: xtensa-*-elf110569
! Ref: xtensa-*-linux*111248
! Ref: windows111586
! Ref: os2111910
! Ref: older112233
! Ref: elf_targets114358
! Node: Old114616
! Node: Configurations117991
! Node: Cross-Compiler122191
! Node: Steps of Cross123948
! Node: Configure Cross125073
! Node: Tools and Libraries125717
! Node: Cross Headers128163
! Node: Build Cross130178
! Node: VMS Install131145
! Node: GNU Free Documentation License140685
! Node: Concept Index163095
End Tag Table
--- 3790,3890 ----
Tag Table:
! Node: Top1696
! Node: Installing GCC2254
! Node: Downloading the source3747
! Node: Configuration5347
! Ref: with-gnu-as18120
! Ref: with-as19392
! Ref: with-gnu-ld20353
! Node: Building34910
! Node: Testing44154
! Node: Final install49545
! Node: Binaries54231
! Node: Specific55979
! Ref: alpha*-*-*56262
! Ref: alpha*-dec-osf*56754
! Ref: alphaev5-cray-unicosmk*60439
! Ref: arc-*-elf61389
! Ref: arm-*-aout61492
! Ref: arm-*-elf61909
! Ref: arm*-*-linux-gnu61987
! Ref: avr62065
! Ref: c4x62748
! Ref: cris63349
! Ref: dos64334
! Ref: dsp16xx64660
! Ref: *-*-freebsd*64730
! Ref: h8300-hms66900
! Ref: hppa*-hp-hpux*67255
! Ref: hppa*-hp-hpux968604
! Ref: hppa*-hp-hpux1069184
! Ref: hppa*-hp-hpux1169895
! Ref: i370-*-*74545
! Ref: *-*-linux-gnu74685
! Ref: ix86-*-linux*aout75677
! Ref: ix86-*-linux*75890
! Ref: ix86-*-sco76207
! Ref: ix86-*-sco3.2v5*76374
! Ref: ix86-*-udk78622
! Ref: ia64-*-linux79989
! Ref: ia64-*-hpux*80980
! Ref: *-lynx-lynxos81412
! Ref: *-ibm-aix*81892
! Ref: ip2k-*-elf86920
! Ref: m32r-*-elf87154
! Ref: m68000-hp-bsd87259
! Ref: m6811-elf87518
! Ref: m6812-elf87671
! Ref: m68k-att-sysv87824
! Ref: m68k-crds-unos88187
! Ref: m68k-hp-hpux89651
! Ref: m68k-ncr-*91667
! Ref: m68k-sun92065
! Ref: m68k-sun-sunos4.1.192329
! Ref: mips-*-*92496
! Ref: mips-sgi-irix593360
! Ref: mips-sgi-irix695344
! Ref: powerpc*-*-*99133
! Ref: powerpc-*-darwin*99281
! Ref: powerpc-*-elf100229
! Ref: powerpc-*-linux-gnu*100351
! Ref: powerpc-*-netbsd*100462
! Ref: powerpc-*-eabiaix100661
! Ref: powerpc-*-eabisim100788
! Ref: powerpc-*-eabi100917
! Ref: powerpcle-*-elf100996
! Ref: powerpcle-*-eabisim101129
! Ref: powerpcle-*-eabi101265
! Ref: s390-*-linux*101351
! Ref: s390x-*-linux*101422
! Ref: *-*-solaris2*101508
! Ref: sparc-sun-solaris2*103966
! Ref: sparc-sun-solaris2.7105690
! Ref: sparc-sun-sunos4*107763
! Ref: sparc-unknown-linux-gnulibc1108430
! Ref: sparc-*-linux*108631
! Ref: sparc64-*-solaris2*108859
! Ref: sparcv9-*-solaris2*109238
! Ref: #*-*-sysv*109326
! Ref: vax-dec-ultrix110290
! Ref: x86_64-*-*110445
! Ref: xtensa-*-elf110777
! Ref: xtensa-*-linux*111459
! Ref: windows111800
! Ref: os2112127
! Ref: older112453
! Ref: elf_targets114581
! Node: Old114842
! Node: Configurations118217
! Node: Cross-Compiler122417
! Node: Steps of Cross124174
! Node: Configure Cross125299
! Node: Tools and Libraries125943
! Node: Cross Headers128389
! Node: Build Cross130404
! Node: VMS Install131371
! Node: GNU Free Documentation License140911
! Node: Concept Index163324
End Tag Table
diff -Nrc3pad gcc-3.3.4/gcc/doc/gccint.info gcc-3.3.5/gcc/doc/gccint.info
*** gcc-3.3.4/gcc/doc/gccint.info 2004-05-31 22:43:08.000000000 +0000
--- gcc-3.3.5/gcc/doc/gccint.info 2004-09-30 17:38:12.000000000 +0000
***************
*** 1,5 ****
! Ceci est le fichier Info doc/gccint.info, produit par Makeinfo version
! 4.6 à partir doc/gccint.texi.
Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
--- 1,5 ----
! This is doc/gccint.info, produced by makeinfo version 4.5 from
! doc/gccint.texi.
Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
*************** File: gccint.info, Node: Top, Next: Co
*** 57,65 ****
Introduction
************
! 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 GCC version 3.3.4.
The use of the GNU compilers is documented in a separate manual. *Note
Introduction: (gcc)Top.
--- 57,65 ----
Introduction
************
! 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 GCC version 3.3.5.
The use of the GNU compilers is documented in a separate manual. *Note
Introduction: (gcc)Top.
*************** File: gccint.info, Node: Contributing,
*** 111,118 ****
Contributing to GCC Development
*******************************
! If you would like to help pretest GCC releases to assure they work well,
! our current development sources are available by CVS (see
`http://gcc.gnu.org/cvs.html'). Source and binary snapshots are also
available for FTP; see `http://gcc.gnu.org/snapshots.html'.
--- 111,118 ----
Contributing to GCC Development
*******************************
! If you would like to help pretest GCC releases to assure they work
! well, our current development sources are available by CVS (see
`http://gcc.gnu.org/cvs.html'). Source and binary snapshots are also
available for FTP; see `http://gcc.gnu.org/snapshots.html'.
*************** File: gccint.info, Node: Portability,
*** 132,139 ****
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.
--- 132,139 ----
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.
*************** File: gccint.info, Node: Interface, Ne
*** 167,174 ****
Interfacing to GCC Output
*************************
! GCC is normally configured to use the same function calling convention
! normally in use on the target system. This is done with the
machine-description macros described (*note Target Macros::).
However, returning of structure and union values is done differently
--- 167,174 ----
Interfacing to GCC Output
*************************
! GCC is normally configured to use the same function calling
! convention normally in use on the target system. This is done with the
machine-description macros described (*note Target Macros::).
However, returning of structure and union values is done differently
*************** File: gccint.info, Node: Languages, Ne
*** 253,260 ****
Language Front Ends in GCC
**************************
! The interface to front ends for languages in GCC, and in particular the
! `tree' structure (*note Trees::), 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
--- 253,260 ----
Language Front Ends in GCC
**************************
! The interface to front ends for languages in GCC, and in particular
! the `tree' structure (*note Trees::), 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
*************** File: gccint.info, Node: Source Tree,
*** 288,294 ****
Source Tree Structure and Build System
**************************************
! This chapter describes the structure of the GCC source tree, and how
GCC is built. The user documentation for building and installing GCC
is in a separate manual (`http://gcc.gnu.org/install/'), with which it
is presumed that you are familiar.
--- 288,294 ----
Source Tree Structure and Build System
**************************************
! This chapter describes the structure of the GCC source tree, and how
GCC is built. The user documentation for building and installing GCC
is in a separate manual (`http://gcc.gnu.org/install/'), with which it
is presumed that you are familiar.
*************** File: gccint.info, Node: Configure Term
*** 306,316 ****
Configure Terms and History
===========================
! The configure and build process has a long and colorful history, and can
! be confusing to anyone who doesn't know why things are the way they are.
! While there are other documents which describe the configuration process
! in detail, here are a few things that everyone working on GCC should
! 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
--- 306,316 ----
Configure Terms and History
===========================
! The configure and build process has a long and colorful history, and
! can be confusing to anyone who doesn't know why things are the way they
! are. While there are other documents which describe the configuration
! process in detail, here are a few things that everyone working on GCC
! should 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
*************** File: gccint.info, Node: Top Level, Ne
*** 363,369 ****
Top Level Source Directory
==========================
! The top level source directory in a GCC distribution contains several
files and directories that are shared with other software distributions
such as that of GNU Binutils. It also contains several subdirectories
that contain parts of GCC and its runtime libraries:
--- 363,369 ----
Top Level Source Directory
==========================
! The top level source directory in a GCC distribution contains several
files and directories that are shared with other software distributions
such as that of GNU Binutils. It also contains several subdirectories
that contain parts of GCC and its runtime libraries:
*************** File: gccint.info, Node: gcc Directory,
*** 430,437 ****
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 test suite.
The files that are sources of GCC are documented in a separate chapter.
*Note Passes and Files of the Compiler: Passes.
--- 430,437 ----
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 test suite.
The files that are sources of GCC are documented in a separate chapter.
*Note Passes and Files of the Compiler: Passes.
*************** File: gccint.info, Node: Subdirectories
*** 454,460 ****
Subdirectories of `gcc'
-----------------------
! The `gcc' directory contains the following subdirectories:
`LANGUAGE'
Subdirectories for various languages. Directories containing a
--- 454,460 ----
Subdirectories of `gcc'
-----------------------
! The `gcc' directory contains the following subdirectories:
`LANGUAGE'
Subdirectories for various languages. Directories containing a
*************** File: gccint.info, Node: Configuration,
*** 512,518 ****
Configuration in the `gcc' Directory
------------------------------------
! The `gcc' directory is configured with an Autoconf-generated script
`configure'. The `configure' script is generated from `configure.in'
and `aclocal.m4'. From the files `configure.in' and `acconfig.h',
Autoheader generates the file `config.in'. The file `cstamp-h.in' is
--- 512,518 ----
Configuration in the `gcc' Directory
------------------------------------
! The `gcc' directory is configured with an Autoconf-generated script
`configure'. The `configure' script is generated from `configure.in'
and `aclocal.m4'. From the files `configure.in' and `acconfig.h',
Autoheader generates the file `config.in'. The file `cstamp-h.in' is
*************** File: gccint.info, Node: Config Fragmen
*** 530,536 ****
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. FIXME: when is the
--- 530,536 ----
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. FIXME: when is the
*************** File: gccint.info, Node: System Config,
*** 557,564 ****
The `config.gcc' File
.....................
! FIXME: document the contents of this file, and what variables should be
! set to control build, host and target configuration.
File: gccint.info, Node: Configuration Files, Prev: System Config, Up: Configuration
--- 557,564 ----
The `config.gcc' File
.....................
! FIXME: document the contents of this file, and what variables should
! be set to control build, host and target configuration.
File: gccint.info, Node: Configuration Files, Prev: System Config, Up: Configuration
*************** File: gccint.info, Node: Configuration
*** 566,575 ****
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.)
--- 566,575 ----
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.)
*************** File: gccint.info, Node: Build, Next:
*** 631,637 ****
Build System in the `gcc' Directory
-----------------------------------
! FIXME: describe the build system, including what is built in what
stages. Also list the various source files that are used in the build
process but aren't source files of GCC itself and so aren't documented
below (*note Passes::).
--- 631,637 ----
Build System in the `gcc' Directory
-----------------------------------
! FIXME: describe the build system, including what is built in what
stages. Also list the various source files that are used in the build
process but aren't source files of GCC itself and so aren't documented
below (*note Passes::).
*************** File: gccint.info, Node: Library Files,
*** 740,750 ****
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
--- 740,750 ----
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
*************** File: gccint.info, Node: Headers, Next
*** 752,758 ****
Headers Installed by GCC
------------------------
! In general, GCC expects the system C library to provide most of the
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
--- 752,758 ----
Headers Installed by GCC
------------------------
! In general, GCC expects the system C library to provide most of the
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
*************** File: gccint.info, Node: Documentation,
*** 792,804 ****
Building Documentation
----------------------
! The main GCC documentation is in the form of manuals in Texinfo format.
! These are installed in Info format, and DVI versions may be generated
! by `make dvi'. 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:
--- 792,804 ----
Building Documentation
----------------------
! The main GCC documentation is in the form of manuals in Texinfo
! format. These are installed in Info format, and DVI versions may be
! generated by `make dvi'. 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
*** 812,818 ****
Texinfo Manuals
...............
! 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
--- 812,818 ----
Texinfo Manuals
...............
! 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
*************** File: gccint.info, Node: Man Page Gener
*** 865,872 ****
Man Page Generation
...................
! 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
--- 865,872 ----
Man Page Generation
...................
! 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
*************** File: gccint.info, Node: Miscellaneous
*** 908,915 ****
Miscellaneous Documentation
...........................
! In addition to the formal documentation that is installed by GCC, there
! are several other text files with miscellaneous documentation:
`ABOUT-GCC-NLS'
Notes on GCC's Native Language Support. FIXME: this should be
--- 908,915 ----
Miscellaneous Documentation
...........................
! In addition to the formal documentation that is installed by GCC,
! there are several other text files with miscellaneous documentation:
`ABOUT-GCC-NLS'
Notes on GCC's Native Language Support. FIXME: this should be
*************** File: gccint.info, Node: Front End, Ne
*** 954,960 ****
Anatomy of a Language Front End
-------------------------------
! 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
--- 954,960 ----
Anatomy of a Language Front End
-------------------------------
! 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
*************** File: gccint.info, Node: Front End Dire
*** 1041,1047 ****
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 build alongside the front end. Certain files are
--- 1041,1047 ----
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 build alongside the front end. Certain files are
*************** File: gccint.info, Node: Front End Conf
*** 1155,1161 ****
The Front End `config-lang.in' File
...................................
! Each language subdirectory contains a `config-lang.in' file. In
addition the main directory contains `c-config-lang.in', which contains
limited information for the C language. This file is a shell script
that may define some variables describing the language:
--- 1155,1161 ----
The Front End `config-lang.in' File
...................................
! Each language subdirectory contains a `config-lang.in' file. In
addition the main directory contains `c-config-lang.in', which contains
limited information for the C language. This file is a shell script
that may define some variables describing the language:
*************** File: gccint.info, Node: Back End, Pre
*** 1222,1228 ****
Anatomy of a Target Back End
----------------------------
! 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
--- 1222,1228 ----
Anatomy of a Target Back End
----------------------------
! 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
*************** File: gccint.info, Node: Test Suites,
*** 1295,1301 ****
Test Suites
===========
! GCC contains several test suites to help maintain compiler quality.
Most of the runtime libraries and language front ends in GCC have test
suites. Currently only the C language test suites are documented here;
FIXME: document the others.
--- 1295,1301 ----
Test Suites
===========
! GCC contains several test suites to help maintain compiler quality.
Most of the runtime libraries and language front ends in GCC have test
suites. Currently only the C language test suites are documented here;
FIXME: document the others.
*************** File: gccint.info, Node: Test Idioms,
*** 1315,1323 ****
Idioms Used in Test Suite Code
------------------------------
! In the `gcc.c-torture' test suites, test cases are commonly named after
! the date on which they were added. This allows people to tell at a
! glance whether a test failure is because of a recently found bug that
has not yet been fixed, or whether it may be a regression. In other
test suites, more descriptive names are used. In general C test cases
have a trailing `-N.c', starting with `-1.c', in case other test cases
--- 1315,1323 ----
Idioms Used in Test Suite Code
------------------------------
! In the `gcc.c-torture' test suites, test cases are commonly named
! after the date on which they were added. This allows people to tell at
! a glance whether a test failure is because of a recently found bug that
has not yet been fixed, or whether it may be a regression. In other
test suites, more descriptive names are used. In general C test cases
have a trailing `-N.c', starting with `-1.c', in case other test cases
*************** File: gccint.info, Node: C Tests, Next
*** 1386,1392 ****
C Language Test Suites
----------------------
! GCC contains the following C language test suites, in the
`gcc/testsuite' directory:
`gcc.dg'
--- 1386,1392 ----
C Language Test Suites
----------------------
! GCC contains the following C language test suites, in the
`gcc/testsuite' directory:
`gcc.dg'
*************** File: gccint.info, Node: libgcj Tests,
*** 1495,1501 ****
The Java library test suites.
-----------------------------
! Runtime tests are executed via `make check' in the
`TARGET/libjava/testsuite' directory in the build tree. Additional
runtime tests can be checked into this testsuite.
--- 1495,1501 ----
The Java library test suites.
-----------------------------
! Runtime tests are executed via `make check' in the
`TARGET/libjava/testsuite' directory in the build tree. Additional
runtime tests can be checked into this testsuite.
*************** File: gccint.info, Node: gcov Testing,
*** 1525,1535 ****
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 `gcov.exp'. `gcov' tests also rely on procedures in `gcc.dg.exp'
! to compile and run the test program. A typical `gcov' test contains
! the following DejaGNU commands within comments:
{ dg-options "-fprofile-arcs -ftest-coverage" }
{ dg-do run { target native } }
--- 1525,1535 ----
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 `gcov.exp'. `gcov' tests also rely on procedures in
! `gcc.dg.exp' to compile and run the test program. A typical `gcov'
! test contains the following DejaGNU commands within comments:
{ dg-options "-fprofile-arcs -ftest-coverage" }
{ dg-do run { target native } }
*************** File: gccint.info, Node: profopt Testin
*** 1586,1592 ****
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
--- 1586,1592 ----
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
*************** File: gccint.info, Node: compat Testing
*** 1626,1634 ****
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 test suites that complement ABI test suites.
--- 1626,1634 ----
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 test suites that complement ABI test suites.
*************** File: gccint.info, Node: Passes, Next:
*** 1701,1707 ****
Passes and Files of the Compiler
********************************
! The overall control structure of the compiler is in `toplev.c'. This
file is responsible for initialization, decoding arguments, opening and
closing files, and sequencing the passes.
--- 1701,1707 ----
Passes and Files of the Compiler
********************************
! The overall control structure of the compiler is in `toplev.c'. This
file is responsible for initialization, decoding arguments, opening and
closing files, and sequencing the passes.
*************** File: gccint.info, Node: Trees, Next:
*** 2189,2195 ****
Trees: The intermediate representation used by the C and C++ front ends
***********************************************************************
! This chapter documents the internal representation used by GCC to
represent C and C++ source programs. When presented with a C or C++
source program, GCC parses the program, performs semantic analysis
(including the generation of error messages), and then produces the
--- 2189,2195 ----
Trees: The intermediate representation used by the C and C++ front ends
***********************************************************************
! This chapter documents the internal representation used by GCC to
represent C and C++ source programs. When presented with a C or C++
source program, GCC parses the program, performs semantic analysis
(including the generation of error messages), and then produces the
*************** File: gccint.info, Node: Deficiencies,
*** 2240,2247 ****
Deficiencies
============
! There are many places in which this document is incomplet and incorrekt.
! It is, as of yet, only _preliminary_ documentation.
File: gccint.info, Node: Tree overview, Next: Types, Prev: Deficiencies, Up: Trees
--- 2240,2247 ----
Deficiencies
============
! There are many places in which this document is incomplet and
! incorrekt. It is, as of yet, only _preliminary_ documentation.
File: gccint.info, Node: Tree overview, Next: Types, Prev: Deficiencies, Up: Trees
*************** File: gccint.info, Node: Tree overview,
*** 2249,2255 ****
Overview
========
! 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
--- 2249,2255 ----
Overview
========
! 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
*************** File: gccint.info, Node: Macros and Fun
*** 2336,2342 ****
Trees
-----
! This section is not here yet.
File: gccint.info, Node: Identifiers, Next: Containers, Prev: Macros and Functions, Up: Tree overview
--- 2336,2342 ----
Trees
-----
! This section is not here yet.
File: gccint.info, Node: Identifiers, Next: Containers, Prev: Macros and Functions, Up: Tree overview
*************** File: gccint.info, Node: Identifiers,
*** 2344,2350 ****
Identifiers
-----------
! An `IDENTIFIER_NODE' represents a slightly more general concept that
the standard C or C++ concept of identifier. In particular, an
`IDENTIFIER_NODE' may contain a `$', or other extraordinary characters.
--- 2344,2350 ----
Identifiers
-----------
! An `IDENTIFIER_NODE' represents a slightly more general concept that
the standard C or C++ concept of identifier. In particular, an
`IDENTIFIER_NODE' may contain a `$', or other extraordinary characters.
*************** File: gccint.info, Node: Containers, P
*** 2382,2388 ****
Containers
----------
! 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
--- 2382,2388 ----
Containers
----------
! 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
*************** File: gccint.info, Node: Types, Next:
*** 2406,2414 ****
Types
=====
! All types have corresponding tree nodes. However, you should not assume
! that there is exactly one tree node corresponding to each type. There
! are often several nodes each of which correspond 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
--- 2406,2414 ----
Types
=====
! All types have corresponding tree nodes. However, you should not
! assume that there is exactly one tree node corresponding to each type.
! There are often several nodes each of which correspond 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
*************** File: gccint.info, Node: Scopes, Next:
*** 2692,2698 ****
Scopes
======
! 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.
--- 2692,2698 ----
Scopes
======
! 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.
*************** File: gccint.info, Node: Namespaces, N
*** 2713,2719 ****
Namespaces
----------
! A namespace is represented by a `NAMESPACE_DECL' node.
However, except for the fact that it is distinguished as the root of
the representation, the global namespace is no different from any other
--- 2713,2719 ----
Namespaces
----------
! A namespace is represented by a `NAMESPACE_DECL' node.
However, except for the fact that it is distinguished as the root of
the representation, the global namespace is no different from any other
*************** File: gccint.info, Node: Classes, Prev
*** 2780,2786 ****
Classes
-------
! 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
--- 2780,2786 ----
Classes
-------
! 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
*************** File: gccint.info, Node: Declarations,
*** 2885,2892 ****
Declarations
============
! 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::.
--- 2885,2892 ----
Declarations
============
! 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::.
*************** File: gccint.info, Node: Functions, Ne
*** 3034,3040 ****
Functions
=========
! A function is represented by a `FUNCTION_DECL' node. A set of
overloaded functions is sometimes represented by a `OVERLOAD' node.
An `OVERLOAD' node is not a declaration, so none of the `DECL_'
--- 3034,3040 ----
Functions
=========
! A function is represented by a `FUNCTION_DECL' node. A set of
overloaded functions is sometimes represented by a `OVERLOAD' node.
An `OVERLOAD' node is not a declaration, so none of the `DECL_'
*************** File: gccint.info, Node: Function Basic
*** 3085,3091 ****
Function Basics
---------------
! 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'.
--- 3085,3091 ----
Function Basics
---------------
! 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'.
*************** File: gccint.info, Node: Function Bodie
*** 3267,3273 ****
Function Bodies
---------------
! 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'.
--- 3267,3273 ----
Function Bodies
---------------
! 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'.
*************** outermost block of the function, but it
*** 3279,3288 ****
Statements
..........
! There are tree nodes corresponding to all of the source-level statement
! constructs. These are enumerated here, together with a list of the
! various macros that can be used to obtain information about them. There
! are a few macros that can be used with all statements:
`STMT_LINENO'
This macro returns the line number for the statement. If the
--- 3279,3288 ----
Statements
..........
! There are tree nodes corresponding to all of the source-level
! statement constructs. These are enumerated here, together with a list
! of the various macros that can be used to obtain information about
! them. There are a few macros that can be used with all statements:
`STMT_LINENO'
This macro returns the line number for the statement. If the
*************** File: gccint.info, Node: Attributes, N
*** 3575,3581 ****
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'
--- 3575,3581 ----
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'
*************** File: gccint.info, Node: Expression tre
*** 3602,3615 ****
Expressions
===========
! The internal representation for expressions is for the most part quite
! straightforward. However, there are a few facts that one must bear in
! mind. In particular, the expression "tree" is actually a directed
! acyclic graph. (For example there may be many references to the integer
! constant zero throughout the source program; many of these will be
! represented by the same expression node.) You should not rely on
! certain kinds of node being shared, nor should rely on certain kinds of
! nodes being unshared.
The following macros can be used with all expression nodes:
--- 3602,3615 ----
Expressions
===========
! The internal representation for expressions is for the most part
! quite straightforward. However, there are a few facts that one must
! bear in mind. In particular, the expression "tree" is actually a
! directed acyclic graph. (For example there may be many references to
! the integer constant zero throughout the source program; many of these
! will be represented by the same expression node.) You should not rely
! on certain kinds of node being shared, nor should rely on certain kinds
! of nodes being unshared.
The following macros can be used with all expression nodes:
*************** File: gccint.info, Node: RTL, Next: Ma
*** 4137,4143 ****
RTL Representation
******************
! Most of the work of the compiler is done on an intermediate
representation called register transfer language. In this language,
the instructions to be output are described, pretty much one by one, in
an algebraic form that describes what the instruction does.
--- 4137,4143 ----
RTL Representation
******************
! Most of the work of the compiler is done on an intermediate
representation called register transfer language. In this language,
the instructions to be output are described, pretty much one by one, in
an algebraic form that describes what the instruction does.
*************** File: gccint.info, Node: RTL Objects,
*** 4177,4183 ****
RTL Object Types
================
! 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'.
--- 4177,4183 ----
RTL Object Types
================
! 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'.
*************** File: gccint.info, Node: RTL Classes,
*** 4253,4261 ****
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,
`rtx.def' defines these classes:
`o'
--- 4253,4261 ----
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,
`rtx.def' defines these classes:
`o'
*************** File: gccint.info, Node: Accessors, Ne
*** 4403,4411 ****
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,
XEXP (X, 2)
--- 4403,4411 ----
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,
XEXP (X, 2)
*************** File: gccint.info, Node: Flags, Next:
*** 4462,4468 ****
Flags in an RTL Expression
==========================
! RTL expressions contain several flags (one-bit bit-fields) that are
used in certain types of expression. Most often they are accessed with
the following macros, which expand into lvalues.
--- 4462,4468 ----
Flags in an RTL Expression
==========================
! RTL expressions contain several flags (one-bit bit-fields) that are
used in certain types of expression. Most often they are accessed with
the following macros, which expand into lvalues.
*************** File: gccint.info, Node: Machine Modes,
*** 4828,4838 ****
Machine Modes
=============
! 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, `enum 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
--- 4828,4839 ----
Machine Modes
=============
! 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, `enum 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
*************** File: gccint.info, Node: Constants, Ne
*** 5056,5062 ****
Constant Expression Types
=========================
! The simplest RTL expressions are those that represent constant values.
`(const_int I)'
This type of expression represents the integer value I. I is
--- 5057,5064 ----
Constant Expression Types
=========================
! The simplest RTL expressions are those that represent constant
! values.
`(const_int I)'
This type of expression represents the integer value I. I is
*************** File: gccint.info, Node: Regs and Memor
*** 5180,5186 ****
Registers and Memory
====================
! Here are the RTL expression types for describing access to machine
registers and to main memory.
`(reg:M N)'
--- 5182,5188 ----
Registers and Memory
====================
! Here are the RTL expression types for describing access to machine
registers and to main memory.
`(reg:M N)'
*************** File: gccint.info, Node: Arithmetic, N
*** 5447,5456 ****
RTL Expressions for Arithmetic
==============================
! 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.
--- 5449,5458 ----
RTL Expressions for Arithmetic
==============================
! 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.
*************** File: gccint.info, Node: Comparisons,
*** 5625,5640 ****
Comparison Operations
=====================
! 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, and `FLOAT_STORE_FLAG_VALUE' (*note Misc::) if
! the relation holds, or zero if it does not, for comparison operators
! that return floating-point values. 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'.
There are two ways that comparison operations may be used. The
comparison operators may be used to compare the condition codes `(cc0)'
--- 5627,5642 ----
Comparison Operations
=====================
! 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, and `FLOAT_STORE_FLAG_VALUE' (*note
! Misc::) if the relation holds, or zero if it does not, for comparison
! operators that return floating-point values. 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'.
There are two ways that comparison operations may be used. The
comparison operators may be used to compare the condition codes `(cc0)'
*************** File: gccint.info, Node: Bit-Fields, N
*** 5721,5727 ****
Bit-Fields
==========
! Special expression codes exist to represent bit-field instructions.
These types of expressions are lvalues in RTL; they may appear on the
left side of an assignment, indicating insertion of a value into the
specified bit-field.
--- 5723,5729 ----
Bit-Fields
==========
! Special expression codes exist to represent bit-field instructions.
These types of expressions are lvalues in RTL; they may appear on the
left side of an assignment, indicating insertion of a value into the
specified bit-field.
*************** File: gccint.info, Node: Vector Operati
*** 5756,5762 ****
Vector Operations
=================
! All normal RTL expressions can be used with vector modes; they are
interpreted as operating on each part of the vector independently.
Additionally, there are a few new expressions to describe specific
vector operations.
--- 5758,5764 ----
Vector Operations
=================
! All normal RTL expressions can be used with vector modes; they are
interpreted as operating on each part of the vector independently.
Additionally, there are a few new expressions to describe specific
vector operations.
*************** File: gccint.info, Node: Conversions,
*** 5798,5809 ****
Conversions
===========
! 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
(plus:SI (sign_extend:SI (reg:QI 34)) (reg:SI 80))
--- 5800,5811 ----
Conversions
===========
! 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
(plus:SI (sign_extend:SI (reg:QI 34)) (reg:SI 80))
*************** File: gccint.info, Node: RTL Declaratio
*** 5882,5889 ****
Declarations
============
! 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
--- 5884,5891 ----
Declarations
============
! 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
*************** File: gccint.info, Node: Side Effects,
*** 5903,5909 ****
Side Effect Expressions
=======================
! The expression codes described so far represent values, not actions.
But machine instructions never produce values; they are meaningful only
for their side effects on the state of the machine. Special expression
codes are used to represent side effects.
--- 5905,5911 ----
Side Effect Expressions
=======================
! The expression codes described so far represent values, not actions.
But machine instructions never produce values; they are meaningful only
for their side effects on the state of the machine. Special expression
codes are used to represent side effects.
*************** File: gccint.info, Node: Incdec, Next:
*** 6221,6227 ****
Embedded Side-Effects on Addresses
==================================
! 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
--- 6223,6229 ----
Embedded Side-Effects on Addresses
==================================
! 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
*************** File: gccint.info, Node: Assembler, Ne
*** 6298,6304 ****
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:
--- 6300,6306 ----
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:
*************** File: gccint.info, Node: Insns, Next:
*** 6333,6339 ****
Insns
=====
! 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;
--- 6335,6341 ----
Insns
=====
! 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;
*************** File: gccint.info, Node: Calls, Next:
*** 6875,6881 ****
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'.
--- 6877,6883 ----
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'.
*************** File: gccint.info, Node: Sharing, Next
*** 6934,6944 ****
Structure Sharing Assumptions
=============================
! The compiler assumes that certain kinds of RTL expressions are unique;
! there do not exist two distinct objects representing the same value.
! In other cases, it makes an opposite assumption: that no RTL expression
! object of a certain kind appears in more than one place in the
! containing structure.
These assumptions refer to a single function; except for the RTL
objects that describe global variables and external functions, and a
--- 6936,6946 ----
Structure Sharing Assumptions
=============================
! The compiler assumes that certain kinds of RTL expressions are
! unique; there do not exist two distinct objects representing the same
! value. In other cases, it makes an opposite assumption: that no RTL
! expression object of a certain kind appears in more than one place in
! the containing structure.
These assumptions refer to a single function; except for the RTL
objects that describe global variables and external functions, and a
*************** File: gccint.info, Node: Reading RTL,
*** 7003,7009 ****
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.c'. It is not available in the compiler
itself, only the various programs that generate the compiler back end
--- 7005,7011 ----
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.c'. It is not available in the compiler
itself, only the various programs that generate the compiler back end
*************** File: gccint.info, Node: Machine Desc,
*** 7028,7034 ****
Machine Descriptions
********************
! 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
--- 7030,7036 ----
Machine Descriptions
********************
! 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
*************** File: gccint.info, Node: Overview, Nex
*** 7073,7079 ****
Overview of How the Machine Description is Used
===============================================
! There are three main conversions that happen in the compiler:
1. The front end reads the source code and builds a parse tree.
--- 7075,7081 ----
Overview of How the Machine Description is Used
===============================================
! There are three main conversions that happen in the compiler:
1. The front end reads the source code and builds a parse tree.
*************** File: gccint.info, Node: Patterns, Nex
*** 7117,7123 ****
Everything about Instruction Patterns
=====================================
! Each instruction pattern 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 pattern or C code to generate
the assembler output, all wrapped up in a `define_insn' expression.
--- 7119,7125 ----
Everything about Instruction Patterns
=====================================
! Each instruction pattern 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 pattern or C code to generate
the assembler output, all wrapped up in a `define_insn' expression.
*************** File: gccint.info, Node: Example, Next
*** 7189,7195 ****
Example of `define_insn'
========================
! Here is an actual example of an instruction pattern, for the
68000/68020.
(define_insn "tstsi"
--- 7191,7197 ----
Example of `define_insn'
========================
! Here is an actual example of an instruction pattern, for the
68000/68020.
(define_insn "tstsi"
*************** File: gccint.info, Node: RTL Template,
*** 7234,7240 ****
RTL Template
============
! The RTL template is used to define which insns match the particular
pattern and how to find their operands. For named patterns, the RTL
template also says how to construct an insn from specified operands.
--- 7236,7242 ----
RTL Template
============
! The RTL template is used to define which insns match the particular
pattern and how to find their operands. For named patterns, the RTL
template also says how to construct an insn from specified operands.
*************** File: gccint.info, Node: Output Templat
*** 7496,7502 ****
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
--- 7498,7504 ----
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
*************** File: gccint.info, Node: Output Stateme
*** 7577,7583 ****
C Statements for Assembler Output
=================================
! Often a single fixed template string cannot produce correct and
efficient assembler code for all the cases that are recognized by a
single instruction pattern. For example, the opcodes may depend on the
kinds of operands; or some unfortunate combinations of operands may
--- 7579,7585 ----
C Statements for Assembler Output
=================================
! Often a single fixed template string cannot produce correct and
efficient assembler code for all the cases that are recognized by a
single instruction pattern. For example, the opcodes may depend on the
kinds of operands; or some unfortunate combinations of operands may
*************** File: gccint.info, Node: Constraints,
*** 7668,7679 ****
Operand Constraints
===================
! Each `match_operand' in an instruction pattern can specify a constraint
! for the type of operands allowed. 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.
* Menu:
--- 7670,7682 ----
Operand Constraints
===================
! Each `match_operand' in an instruction pattern can specify a
! constraint for the type of operands allowed. 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.
* Menu:
*************** File: gccint.info, Node: Simple Constra
*** 7689,7695 ****
Simple Constraints
------------------
! The simplest kind of constraint is a string full of letters, each of
which describes one kind of operand that is permitted. Here are the
letters that are allowed:
--- 7692,7698 ----
Simple Constraints
------------------
! The simplest kind of constraint is a string full of letters, each of
which describes one kind of operand that is permitted. Here are the
letters that are allowed:
*************** File: gccint.info, Node: Multi-Alternat
*** 7970,7980 ****
Multiple Alternative Constraints
--------------------------------
! Sometimes a single instruction has multiple alternative sets of possible
! operands. For example, on the 68000, a logical-or instruction can
! combine register or an immediate value into memory, or it can combine
! any kind of operand into a register; but it cannot combine one memory
! location into another.
These constraints are represented as multiple alternatives. An
alternative can be described by a series of letters for each operand.
--- 7973,7983 ----
Multiple Alternative Constraints
--------------------------------
! Sometimes a single instruction has multiple alternative sets of
! possible operands. For example, on the 68000, a logical-or instruction
! can combine register or an immediate value into memory, or it can
! combine any kind of operand into a register; but it cannot combine one
! memory location into another.
These constraints are represented as multiple alternatives. An
alternative can be described by a series of letters for each operand.
*************** File: gccint.info, Node: Class Preferen
*** 8030,8044 ****
Register Class Preferences
--------------------------
! The operand constraints have another function: they enable the compiler
! 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.
Of course, on some machines all registers are equivalent, and no
register classes are defined. Then none of this complexity is relevant.
--- 8033,8047 ----
Register Class Preferences
--------------------------
! The operand constraints have another function: they enable the
! compiler 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.
Of course, on some machines all registers are equivalent, and no
register classes are defined. Then none of this complexity is relevant.
*************** File: gccint.info, Node: Modifiers, Ne
*** 8049,8055 ****
Constraint Modifier Characters
------------------------------
! Here are constraint modifier characters.
`='
Means that this operand is write-only for this instruction: the
--- 8052,8058 ----
Constraint Modifier Characters
------------------------------
! Here are constraint modifier characters.
`='
Means that this operand is write-only for this instruction: the
*************** File: gccint.info, Node: Machine Constr
*** 8136,8144 ****
Constraints for Particular Machines
-----------------------------------
! 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
--- 8139,8147 ----
Constraints for Particular Machines
-----------------------------------
! 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
*************** File: gccint.info, Node: Standard Names
*** 9146,9153 ****
Standard Pattern Names For Generation
=====================================
! Here is a table of the instruction names that are meaningful in the RTL
! generation pass of the compiler. Giving one of these names to an
instruction pattern tells the RTL generation pass that it can use the
pattern to accomplish a certain task.
--- 9149,9156 ----
Standard Pattern Names For Generation
=====================================
! Here is a table of the instruction names that are meaningful in the
! RTL generation pass of the compiler. Giving one of these names to an
instruction pattern tells the RTL generation pass that it can use the
pattern to accomplish a certain task.
*************** pattern to accomplish a certain task.
*** 9487,9499 ****
The use for multiple `clrstrM' is as for `movstrM'.
`cmpstrM'
! Block compare instruction, with five operands. Operand 0 is the
output; it has mode M. The remaining four operands are like the
operands of `movstrM'. The two memory blocks specified are
compared byte by byte in lexicographic order. 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
--- 9490,9511 ----
The use for multiple `clrstrM' is as for `movstrM'.
`cmpstrM'
! String compare instruction, with five operands. Operand 0 is the
output; it has mode M. The remaining four operands are like the
operands of `movstrM'. The two memory blocks specified are
compared byte by byte in lexicographic order. The effect of the
instruction is to 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. 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
*************** File: gccint.info, Node: Pattern Orderi
*** 10103,10113 ****
When the Order of Patterns Matters
==================================
! Sometimes an insn can match more than one instruction pattern. Then the
! pattern that appears first in the machine description is the one used.
! Therefore, more specific patterns (patterns that will match fewer
! things) and faster instructions (those that will produce better code
! when they do match) should usually go first in the description.
In some cases the effect of ordering the patterns can be used to hide
a pattern when it is not valid. For example, the 68000 has an
--- 10115,10125 ----
When the Order of Patterns Matters
==================================
! Sometimes an insn can match more than one instruction pattern. Then
! the pattern that appears first in the machine description is the one
! used. Therefore, more specific patterns (patterns that will match
! fewer things) and faster instructions (those that will produce better
! code when they do match) should usually go first in the description.
In some cases the effect of ordering the patterns can be used to hide
a pattern when it is not valid. For example, the 68000 has an
*************** File: gccint.info, Node: Dependent Patt
*** 10127,10133 ****
Interdependence of Patterns
===========================
! Every machine description must have a named pattern for each of the
conditional branch names `bCOND'. The recognition template must always
have the form
--- 10139,10145 ----
Interdependence of Patterns
===========================
! Every machine description must have a named pattern for each of the
conditional branch names `bCOND'. The recognition template must always
have the form
*************** File: gccint.info, Node: Jump Patterns,
*** 10198,10204 ****
Defining Jump Instruction Patterns
==================================
! For most machines, GCC assumes that the machine has a condition code.
A comparison insn sets the condition code, recording the results of both
signed and unsigned comparison of the given operands. A separate branch
insn tests the condition code and branches or not according its value.
--- 10210,10216 ----
Defining Jump Instruction Patterns
==================================
! For most machines, GCC assumes that the machine has a condition code.
A comparison insn sets the condition code, recording the results of both
signed and unsigned comparison of the given operands. A separate branch
insn tests the condition code and branches or not according its value.
*************** File: gccint.info, Node: Looping Patter
*** 10309,10315 ****
Defining Looping Instruction Patterns
=====================================
! 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
--- 10321,10327 ----
Defining Looping Instruction Patterns
=====================================
! 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
*************** File: gccint.info, Node: Insn Canonical
*** 10405,10416 ****
Canonicalization of Instructions
================================
! There are often cases where multiple RTL expressions could represent an
! operation performed by a single machine instruction. This situation is
! most commonly encountered with logical, branch, and multiply-accumulate
! instructions. In such cases, the compiler attempts to convert these
! multiple RTL expressions into a single canonical form to reduce the
! number of insn patterns required.
In addition to algebraic simplifications, following canonicalizations
are performed:
--- 10417,10428 ----
Canonicalization of Instructions
================================
! There are often cases where multiple RTL expressions could represent
! an operation performed by a single machine instruction. This situation
! is most commonly encountered with logical, branch, and
! multiply-accumulate instructions. In such cases, the compiler attempts
! to convert these multiple RTL expressions into a single canonical form
! to reduce the number of insn patterns required.
In addition to algebraic simplifications, following canonicalizations
are performed:
*************** File: gccint.info, Node: Expander Defin
*** 10497,10505 ****
Defining RTL Sequences for Code Generation
==========================================
! 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
--- 10509,10517 ----
Defining RTL Sequences for Code Generation
==========================================
! 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
*************** File: gccint.info, Node: Insn Splitting
*** 10678,10684 ****
Defining How to Split Instructions
==================================
! There are two cases where you should specify how to split a pattern
into multiple insns. On machines that have instructions requiring
delay slots (*note Delay Slots::) or that have instructions whose
output is not available for multiple cycles (*note Processor pipeline
--- 10690,10696 ----
Defining How to Split Instructions
==================================
! There are two cases where you should specify how to split a pattern
into multiple insns. On machines that have instructions requiring
delay slots (*note Delay Slots::) or that have instructions whose
output is not available for multiple cycles (*note Processor pipeline
*************** File: gccint.info, Node: Including Patt
*** 10892,10898 ****
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.
--- 10904,10910 ----
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.
*************** subsections and placed into subdirectori
*** 10930,10936 ****
RTL Generation Tool Options for Directory Search
------------------------------------------------
! The `-IDIR' option specifies directories to search for machine
descriptions. For example:
--- 10942,10948 ----
RTL Generation Tool Options for Directory Search
------------------------------------------------
! The `-IDIR' option specifies directories to search for machine
descriptions. For example:
*************** File: gccint.info, Node: Peephole Defin
*** 10950,10956 ****
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
--- 10962,10968 ----
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
*************** File: gccint.info, Node: define_peephol
*** 10981,10987 ****
RTL to Text Peephole Optimizers
-------------------------------
! A definition looks like this:
(define_peephole
[INSN-PATTERN-1
--- 10993,10999 ----
RTL to Text Peephole Optimizers
-------------------------------
! A definition looks like this:
(define_peephole
[INSN-PATTERN-1
*************** File: gccint.info, Node: define_peephol
*** 11136,11144 ****
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.
(define_peephole2
[INSN-PATTERN-1
--- 11148,11157 ----
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.
(define_peephole2
[INSN-PATTERN-1
*************** File: gccint.info, Node: Insn Attribute
*** 11212,11218 ****
Instruction Attributes
======================
! 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
--- 11225,11231 ----
Instruction Attributes
======================
! 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
*************** File: gccint.info, Node: Defining Attri
*** 11236,11243 ****
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)
--- 11249,11256 ----
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)
*************** File: gccint.info, Node: Expressions,
*** 11288,11296 ****
Attribute Expressions
---------------------
! RTL expressions used to define attributes use the codes described above
! 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
--- 11301,11310 ----
Attribute Expressions
---------------------
! RTL expressions used to define attributes use the codes described
! above 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
*************** File: gccint.info, Node: Tagging Insns,
*** 11447,11462 ****
Assigning Attribute Values to Insns
-----------------------------------
! 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
--- 11461,11476 ----
Assigning Attribute Values to Insns
-----------------------------------
! 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
*************** File: gccint.info, Node: Attr Example,
*** 11542,11548 ****
Example of Attribute Specifications
-----------------------------------
! 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
--- 11556,11562 ----
Example of Attribute Specifications
-----------------------------------
! 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
*************** File: gccint.info, Node: Insn Lengths,
*** 11596,11607 ****
Computing the Length of an Insn
-------------------------------
! 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:
--- 11610,11622 ----
Computing the Length of an Insn
-------------------------------
! 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:
*************** File: gccint.info, Node: Constant Attri
*** 11675,11684 ****
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,
(define_attr "cpu" "m88100,m88110,m88000"
(const
--- 11690,11699 ----
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,
(define_attr "cpu" "m88100,m88110,m88000"
(const
*************** File: gccint.info, Node: Delay Slots,
*** 11704,11711 ****
Delay Slot Scheduling
---------------------
! 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
--- 11719,11726 ----
Delay Slot Scheduling
---------------------
! 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
*************** File: gccint.info, Node: Processor pipe
*** 11773,11786 ****
Specifying processor pipeline description
-----------------------------------------
! 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
--- 11788,11801 ----
Specifying processor pipeline description
-----------------------------------------
! 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
*************** File: gccint.info, Node: Old pipeline d
*** 11846,11852 ****
Specifying Function Units
.........................
! On most RISC machines, there are instructions whose results are not
available for a specific number of cycles. Common cases are
instructions that load data from memory. On many machines, a pipeline
stall will result if the data is referenced too soon after the load
--- 11861,11867 ----
Specifying Function Units
.........................
! On most RISC machines, there are instructions whose results are not
available for a specific number of cycles. Common cases are
instructions that load data from memory. On many machines, a pipeline
stall will result if the data is referenced too soon after the load
*************** File: gccint.info, Node: Automaton pipe
*** 11962,11968 ****
Describing instruction pipeline characteristics
...............................................
! This section describes constructions of the automaton based processor
pipeline description. The order of constructions within the machine
description file is not important.
--- 11977,11983 ----
Describing instruction pipeline characteristics
...............................................
! This section describes constructions of the automaton based processor
pipeline description. The order of constructions within the machine
description file is not important.
*************** File: gccint.info, Node: Comparison of
*** 12240,12246 ****
Drawbacks of the old pipeline description
.........................................
! The old instruction level parallelism description and the pipeline
hazards recognizer based on it have the following drawbacks in
comparison with the DFA-based ones:
--- 12255,12261 ----
Drawbacks of the old pipeline description
.........................................
! The old instruction level parallelism description and the pipeline
hazards recognizer based on it have the following drawbacks in
comparison with the DFA-based ones:
*************** File: gccint.info, Node: Conditional Ex
*** 12282,12288 ****
Conditional Execution
=====================
! A number of architectures provide for some form of conditional
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
--- 12297,12303 ----
Conditional Execution
=====================
! A number of architectures provide for some form of conditional
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
*************** File: gccint.info, Node: Constant Defin
*** 12351,12358 ****
Constant Definitions
====================
! 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
--- 12366,12373 ----
Constant Definitions
====================
! 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
*************** File: gccint.info, Node: Target Macros,
*** 12400,12410 ****
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
--- 12415,12425 ----
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
*************** The Global `targetm' Variable
*** 12467,12476 ****
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.
File: gccint.info, Node: Driver, Next: Run-time Target, Prev: Target Structure, Up: Target Macros
--- 12482,12491 ----
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.
File: gccint.info, Node: Driver, Next: Run-time Target, Prev: Target Structure, Up: Target Macros
*************** File: gccint.info, Node: Driver, Next:
*** 12478,12484 ****
Controlling the Compilation Driver, `gcc'
=========================================
! You can control the compilation driver.
`SWITCH_TAKES_ARG (CHAR)'
A C expression which determines whether the option `-CHAR' takes
--- 12493,12499 ----
Controlling the Compilation Driver, `gcc'
=========================================
! You can control the compilation driver.
`SWITCH_TAKES_ARG (CHAR)'
A C expression which determines whether the option `-CHAR' takes
*************** File: gccint.info, Node: Run-time Targe
*** 12914,12920 ****
Run-time Target Specification
=============================
! Here are run-time target specifications.
`TARGET_CPU_CPP_BUILTINS()'
This function-like macro expands to a block of code that defines
--- 12929,12935 ----
Run-time Target Specification
=============================
! Here are run-time target specifications.
`TARGET_CPU_CPP_BUILTINS()'
This function-like macro expands to a block of code that defines
*************** File: gccint.info, Node: Per-Function D
*** 13124,13130 ****
Defining data structures for per-function information.
======================================================
! If the target needs to store information on a per-function basis, GCC
provides a macro and a couple of variables to allow this. Note, just
using statics to store the information is a bad idea, since GCC supports
nested functions, so you can be halfway through encoding one function
--- 13139,13145 ----
Defining data structures for per-function information.
======================================================
! If the target needs to store information on a per-function basis, GCC
provides a macro and a couple of variables to allow this. Note, just
using statics to store the information is a bad idea, since GCC supports
nested functions, so you can be halfway through encoding one function
*************** File: gccint.info, Node: Storage Layout
*** 13183,13192 ****
Storage Layout
==============
! 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::.
`BITS_BIG_ENDIAN'
Define this macro to have the value 1 if the most significant bit
--- 13198,13207 ----
Storage Layout
==============
! 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::.
`BITS_BIG_ENDIAN'
Define this macro to have the value 1 if the most significant bit
*************** File: gccint.info, Node: Type Layout,
*** 13702,13711 ****
Layout of Source Language Data Types
====================================
! These macros define the sizes and other characteristics of the standard
! basic data types used in programs being compiled. Unlike the macros in
! the previous section, these apply to specific features of C and related
! languages, rather than to fundamental aspects of storage layout.
`INT_TYPE_SIZE'
A C expression for the size in bits of the type `int' on the
--- 13717,13727 ----
Layout of Source Language Data Types
====================================
! These macros define the sizes and other characteristics of the
! standard basic data types used in programs being compiled. Unlike the
! macros in the previous section, these apply to specific features of C
! and related languages, rather than to fundamental aspects of storage
! layout.
`INT_TYPE_SIZE'
A C expression for the size in bits of the type `int' on the
*************** File: gccint.info, Node: Escape Sequenc
*** 13945,13951 ****
Target Character Escape Sequences
=================================
! By default, GCC assumes that the C character escape sequences take on
their ASCII values for the target. If this is not correct, you must
explicitly define all of the macros below.
--- 13961,13967 ----
Target Character Escape Sequences
=================================
! By default, GCC assumes that the C character escape sequences take on
their ASCII values for the target. If this is not correct, you must
explicitly define all of the macros below.
*************** File: gccint.info, Node: Registers, Ne
*** 13976,13983 ****
Register Usage
==============
! This section explains how to describe what registers the target machine
! has, and how (in general) they can be used.
The description of which registers a specific instruction can use is
done with register classes; see *Note Register Classes::. For
--- 13992,13999 ----
Register Usage
==============
! This section explains how to describe what registers the target
! machine has, and how (in general) they can be used.
The description of which registers a specific instruction can use is
done with register classes; see *Note Register Classes::. For
*************** File: gccint.info, Node: Register Basic
*** 14000,14006 ****
Basic Characteristics of Registers
----------------------------------
! Registers have various characteristics.
`FIRST_PSEUDO_REGISTER'
Number of hardware registers known to the compiler. They receive
--- 14016,14022 ----
Basic Characteristics of Registers
----------------------------------
! Registers have various characteristics.
`FIRST_PSEUDO_REGISTER'
Number of hardware registers known to the compiler. They receive
*************** File: gccint.info, Node: Allocation Ord
*** 14118,14124 ****
Order of Allocation of Registers
--------------------------------
! Registers are allocated in order.
`REG_ALLOC_ORDER'
If defined, an initializer for a vector of integers, containing the
--- 14134,14140 ----
Order of Allocation of Registers
--------------------------------
! Registers are allocated in order.
`REG_ALLOC_ORDER'
If defined, an initializer for a vector of integers, containing the
*************** File: gccint.info, Node: Values in Regi
*** 14154,14160 ****
How Values Fit in Registers
---------------------------
! This section discusses the macros that describe which kinds of values
(specifically, which machine modes) each register can hold, and how many
consecutive registers are needed for a given mode.
--- 14170,14176 ----
How Values Fit in Registers
---------------------------
! This section discusses the macros that describe which kinds of values
(specifically, which machine modes) each register can hold, and how many
consecutive registers are needed for a given mode.
*************** File: gccint.info, Node: Leaf Functions
*** 14257,14264 ****
Handling Leaf Functions
-----------------------
! On some machines, a leaf function (i.e., one which makes no calls) can
! run more efficiently if it does not make its own register window.
Often this means it is required to receive its arguments in the
registers where they are passed by the caller, instead of the registers
where they would normally arrive.
--- 14273,14280 ----
Handling Leaf Functions
-----------------------
! On some machines, a leaf function (i.e., one which makes no calls)
! can run more efficiently if it does not make its own register window.
Often this means it is required to receive its arguments in the
registers where they are passed by the caller, instead of the registers
where they would normally arrive.
*************** File: gccint.info, Node: Stack Register
*** 14318,14324 ****
Registers That Form a Stack
---------------------------
! There are special features to handle computers where some of the
"registers" form a stack, as in the 80387 coprocessor for the 80386.
Stack registers are normally written by pushing onto the stack, and are
numbered relative to the top of the stack.
--- 14334,14340 ----
Registers That Form a Stack
---------------------------
! There are special features to handle computers where some of the
"registers" form a stack, as in the 80387 coprocessor for the 80386.
Stack registers are normally written by pushing onto the stack, and are
numbered relative to the top of the stack.
*************** File: gccint.info, Node: Register Class
*** 14343,14353 ****
Register Classes
================
! 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
--- 14359,14369 ----
Register Classes
================
! 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
*************** File: gccint.info, Node: Stack and Call
*** 14798,14804 ****
Stack Layout and Calling Conventions
====================================
! This describes the stack layout and calling conventions.
* Menu:
--- 14814,14820 ----
Stack Layout and Calling Conventions
====================================
! This describes the stack layout and calling conventions.
* Menu:
*************** File: gccint.info, Node: Frame Layout,
*** 14822,14828 ****
Basic Stack Layout
------------------
! Here is the basic stack layout.
`STACK_GROWS_DOWNWARD'
Define this macro if pushing a word onto the stack moves the stack
--- 14838,14844 ----
Basic Stack Layout
------------------
! Here is the basic stack layout.
`STACK_GROWS_DOWNWARD'
Define this macro if pushing a word onto the stack moves the stack
*************** File: gccint.info, Node: Stack Checking
*** 15091,15098 ****
Specifying How Stack Checking is Done
-------------------------------------
! GCC will check that stack references are within the boundaries of the
! stack, if the `-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 stack checking to be done at
--- 15107,15114 ----
Specifying How Stack Checking is Done
-------------------------------------
! GCC will check that stack references are within the boundaries of
! the stack, if the `-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 stack checking to be done at
*************** File: gccint.info, Node: Frame Register
*** 15168,15174 ****
Registers That Address the Stack Frame
--------------------------------------
! This discusses registers that address the stack frame.
`STACK_POINTER_REGNUM'
The register number of the stack pointer register, which must also
--- 15184,15190 ----
Registers That Address the Stack Frame
--------------------------------------
! This discusses registers that address the stack frame.
`STACK_POINTER_REGNUM'
The register number of the stack pointer register, which must also
*************** File: gccint.info, Node: Elimination,
*** 15285,15291 ****
Eliminating Frame Pointer and Arg Pointer
-----------------------------------------
! This is about eliminating the frame pointer and arg pointer.
`FRAME_POINTER_REQUIRED'
A C expression which is nonzero if a function must have and use a
--- 15301,15307 ----
Eliminating Frame Pointer and Arg Pointer
-----------------------------------------
! This is about eliminating the frame pointer and arg pointer.
`FRAME_POINTER_REQUIRED'
A C expression which is nonzero if a function must have and use a
*************** File: gccint.info, Node: Stack Argument
*** 15369,15375 ****
Passing Function Arguments on the Stack
---------------------------------------
! The macros in this section control how arguments are passed on the
stack. See the following section for other macros that control passing
certain arguments in registers.
--- 15385,15391 ----
Passing Function Arguments on the Stack
---------------------------------------
! The macros in this section control how arguments are passed on the
stack. See the following section for other macros that control passing
certain arguments in registers.
*************** File: gccint.info, Node: Register Argum
*** 15533,15539 ****
Passing Arguments in Registers
------------------------------
! This section describes the macros which let you control how various
types of arguments are passed in registers or how they are arranged in
the stack.
--- 15549,15555 ----
Passing Arguments in Registers
------------------------------
! This section describes the macros which let you control how various
types of arguments are passed in registers or how they are arranged in
the stack.
*************** File: gccint.info, Node: Scalar Return,
*** 15760,15766 ****
How Scalar Function Values Are Returned
---------------------------------------
! This section discusses the macros that control returning scalars as
values--values that can fit in registers.
`FUNCTION_VALUE (VALTYPE, FUNC)'
--- 15776,15782 ----
How Scalar Function Values Are Returned
---------------------------------------
! This section discusses the macros that control returning scalars as
values--values that can fit in registers.
`FUNCTION_VALUE (VALTYPE, FUNC)'
*************** File: gccint.info, Node: Aggregate Retu
*** 15849,15855 ****
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 `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
--- 15865,15871 ----
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 `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
*************** File: gccint.info, Node: Caller Saves,
*** 15931,15937 ****
Caller-Saves Register Allocation
--------------------------------
! If you enable it, GCC can save registers around function calls. This
makes it possible to use call-clobbered registers to hold variables that
must live across calls.
--- 15947,15953 ----
Caller-Saves Register Allocation
--------------------------------
! If you enable it, GCC can save registers around function calls. This
makes it possible to use call-clobbered registers to hold variables that
must live across calls.
*************** File: gccint.info, Node: Function Entry
*** 15965,15971 ****
Function Entry and Exit
-----------------------
! This section describes the macros that output function entry
("prologue") and exit ("epilogue") code.
- Target Hook: void TARGET_ASM_FUNCTION_PROLOGUE (FILE *FILE,
--- 15981,15987 ----
Function Entry and Exit
-----------------------
! This section describes the macros that output function entry
("prologue") and exit ("epilogue") code.
- Target Hook: void TARGET_ASM_FUNCTION_PROLOGUE (FILE *FILE,
*************** File: gccint.info, Node: Profiling, Ne
*** 16214,16220 ****
Generating Code for Profiling
-----------------------------
! These macros will help you generate code for profiling.
`FUNCTION_PROFILER (FILE, LABELNO)'
A C statement or compound statement to output to FILE some
--- 16230,16236 ----
Generating Code for Profiling
-----------------------------
! These macros will help you generate code for profiling.
`FUNCTION_PROFILER (FILE, LABELNO)'
A C statement or compound statement to output to FILE some
*************** File: gccint.info, Node: Varargs, Next
*** 16269,16276 ****
Implementing the Varargs Macros
===============================
! GCC comes with an implementation of `' and `' 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.
--- 16285,16292 ----
Implementing the Varargs Macros
===============================
! GCC comes with an implementation of `' and `'
! 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.
*************** File: gccint.info, Node: Trampolines,
*** 16424,16430 ****
Trampolines for Nested Functions
================================
! A "trampoline" is a small piece of code that is created at run time
when the address of a nested function is taken. It normally resides on
the stack, in the stack frame of the containing function. These macros
tell GCC how to generate code to allocate and initialize a trampoline.
--- 16440,16446 ----
Trampolines for Nested Functions
================================
! A "trampoline" is a small piece of code that is created at run time
when the address of a nested function is taken. It normally resides on
the stack, in the stack frame of the containing function. These macros
tell GCC how to generate code to allocate and initialize a trampoline.
*************** File: gccint.info, Node: Library Calls,
*** 16575,16581 ****
Implicit Calls to Library Routines
==================================
! Here is an explanation of implicit calls to library routines.
`MULSI3_LIBCALL'
A C string constant giving the name of the function to call for
--- 16591,16597 ----
Implicit Calls to Library Routines
==================================
! Here is an explanation of implicit calls to library routines.
`MULSI3_LIBCALL'
A C string constant giving the name of the function to call for
*************** File: gccint.info, Node: Addressing Mod
*** 16704,16710 ****
Addressing Modes
================
! This is about addressing modes.
`HAVE_PRE_INCREMENT'
`HAVE_PRE_DECREMENT'
--- 16720,16726 ----
Addressing Modes
================
! This is about addressing modes.
`HAVE_PRE_INCREMENT'
`HAVE_PRE_DECREMENT'
*************** File: gccint.info, Node: Condition Code
*** 16941,16947 ****
Condition Code Status
=====================
! This describes the condition code status.
The file `conditions.h' defines a variable `cc_status' to describe
how the condition code was computed (in case the interpretation of the
--- 16957,16963 ----
Condition Code Status
=====================
! This describes the condition code status.
The file `conditions.h' defines a variable `cc_status' to describe
how the condition code was computed (in case the interpretation of the
*************** File: gccint.info, Node: Costs, Next:
*** 17128,17135 ****
Describing Relative Costs of Operations
=======================================
! These macros let you describe the relative speed of various operations
! on the target machine.
`CONST_COSTS (X, CODE, OUTER_CODE)'
A part of a C `switch' statement that describes the relative costs
--- 17144,17151 ----
Describing Relative Costs of Operations
=======================================
! These macros let you describe the relative speed of various
! operations on the target machine.
`CONST_COSTS (X, CODE, OUTER_CODE)'
A part of a C `switch' statement that describes the relative costs
*************** File: gccint.info, Node: Scheduling, N
*** 17392,17398 ****
Adjusting the Instruction Scheduler
===================================
! The instruction scheduler may need a fair amount of machine-specific
adjustment in order to produce good code. GCC provides several target
hooks for this purpose. It is usually enough to define just a few of
them: try the first ones in this list first.
--- 17408,17414 ----
Adjusting the Instruction Scheduler
===================================
! The instruction scheduler may need a fair amount of machine-specific
adjustment in order to produce good code. GCC provides several target
hooks for this purpose. It is usually enough to define just a few of
them: try the first ones in this list first.
*************** File: gccint.info, Node: Sections, Nex
*** 17623,17629 ****
Dividing the Output into Sections (Texts, Data, ...)
====================================================
! 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",
--- 17639,17645 ----
Dividing the Output into Sections (Texts, Data, ...)
====================================================
! 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",
*************** File: gccint.info, Node: PIC, Next: As
*** 17842,17850 ****
Position Independent Code
=========================
! 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 macros
`GO_IF_LEGITIMATE_ADDRESS' and `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
--- 17858,17866 ----
Position Independent Code
=========================
! 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 macros
`GO_IF_LEGITIMATE_ADDRESS' and `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
*************** File: gccint.info, Node: Assembler Form
*** 17897,17904 ****
Defining the Output Assembler Language
======================================
! This section describes macros whose principal purpose is to describe how
! to write instructions in assembler language--rather than what the
instructions do.
* Menu:
--- 17913,17920 ----
Defining the Output Assembler Language
======================================
! This section describes macros whose principal purpose is to describe
! how to write instructions in assembler language--rather than what the
instructions do.
* Menu:
*************** File: gccint.info, Node: File Framework
*** 17923,17929 ****
The Overall Framework of an Assembler File
------------------------------------------
! This describes the overall framework of an assembler file.
`ASM_FILE_START (STREAM)'
A C expression which outputs to the stdio stream STREAM some
--- 17939,17945 ----
The Overall Framework of an Assembler File
------------------------------------------
! This describes the overall framework of an assembler file.
`ASM_FILE_START (STREAM)'
A C expression which outputs to the stdio stream STREAM some
*************** File: gccint.info, Node: Uninitialized
*** 18193,18199 ****
Output of Uninitialized Variables
---------------------------------
! Each of the macros in this section is used to do the whole job of
outputting a single uninitialized variable.
`ASM_OUTPUT_COMMON (STREAM, NAME, SIZE, ROUNDED)'
--- 18209,18215 ----
Output of Uninitialized Variables
---------------------------------
! Each of the macros in this section is used to do the whole job of
outputting a single uninitialized variable.
`ASM_OUTPUT_COMMON (STREAM, NAME, SIZE, ROUNDED)'
*************** File: gccint.info, Node: Label Output,
*** 18303,18309 ****
Output and Generation of Labels
-------------------------------
! This is about outputting labels.
`ASM_OUTPUT_LABEL (STREAM, NAME)'
A C statement (sans semicolon) to output to the stdio stream
--- 18319,18325 ----
Output and Generation of Labels
-------------------------------
! This is about outputting labels.
`ASM_OUTPUT_LABEL (STREAM, NAME)'
A C statement (sans semicolon) to output to the stdio stream
*************** File: gccint.info, Node: Initialization
*** 18697,18707 ****
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
--- 18713,18723 ----
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
*************** File: gccint.info, Node: Macros for Ini
*** 18812,18819 ****
Macros Controlling Initialization Routines
------------------------------------------
! Here are the macros that control how the compiler handles initialization
! and termination functions:
`INIT_SECTION_ASM_OP'
If defined, a C string constant, including spacing, for the
--- 18828,18835 ----
Macros Controlling Initialization Routines
------------------------------------------
! Here are the macros that control how the compiler handles
! initialization and termination functions:
`INIT_SECTION_ASM_OP'
If defined, a C string constant, including spacing, for the
*************** File: gccint.info, Node: Instruction Ou
*** 18945,18951 ****
Output of Assembler Instructions
--------------------------------
! This describes assembler instruction output.
`REGISTER_NAMES'
A C initializer containing the assembler's names for the machine
--- 18961,18967 ----
Output of Assembler Instructions
--------------------------------
! This describes assembler instruction output.
`REGISTER_NAMES'
A C initializer containing the assembler's names for the machine
*************** File: gccint.info, Node: Dispatch Table
*** 19134,19140 ****
Output of Dispatch Tables
-------------------------
! This concerns dispatch tables.
`ASM_OUTPUT_ADDR_DIFF_ELT (STREAM, BODY, VALUE, REL)'
A C statement to output to the stdio stream STREAM an assembler
--- 19150,19156 ----
Output of Dispatch Tables
-------------------------
! This concerns dispatch tables.
`ASM_OUTPUT_ADDR_DIFF_ELT (STREAM, BODY, VALUE, REL)'
A C statement to output to the stdio stream STREAM an assembler
*************** File: gccint.info, Node: Exception Regi
*** 19195,19201 ****
Assembler Commands for Exception Regions
----------------------------------------
! This describes commands marking the start and the end of an exception
region.
`EH_FRAME_SECTION_NAME'
--- 19211,19217 ----
Assembler Commands for Exception Regions
----------------------------------------
! This describes commands marking the start and the end of an exception
region.
`EH_FRAME_SECTION_NAME'
*************** File: gccint.info, Node: Alignment Outp
*** 19274,19280 ****
Assembler Commands for Alignment
--------------------------------
! This describes commands for alignment.
`JUMP_ALIGN (LABEL)'
The alignment (log base 2) to put in front of LABEL, which is a
--- 19290,19296 ----
Assembler Commands for Alignment
--------------------------------
! This describes commands for alignment.
`JUMP_ALIGN (LABEL)'
The alignment (log base 2) to put in front of LABEL, which is a
*************** File: gccint.info, Node: Debugging Info
*** 19368,19374 ****
Controlling Debugging Information Format
========================================
! This describes how to specify debugging information.
* Menu:
--- 19384,19390 ----
Controlling Debugging Information Format
========================================
! This describes how to specify debugging information.
* Menu:
*************** File: gccint.info, Node: All Debuggers,
*** 19385,19391 ****
Macros Affecting All Debugging Formats
--------------------------------------
! These macros affect all debugging formats.
`DBX_REGISTER_NUMBER (REGNO)'
A C expression that returns the DBX register number for the
--- 19401,19407 ----
Macros Affecting All Debugging Formats
--------------------------------------
! These macros affect all debugging formats.
`DBX_REGISTER_NUMBER (REGNO)'
A C expression that returns the DBX register number for the
*************** File: gccint.info, Node: DBX Options,
*** 19446,19452 ****
Specific Options for DBX Output
-------------------------------
! These are specific options for DBX output.
`DBX_DEBUGGING_INFO'
Define this macro if GCC should produce debugging output for DBX
--- 19462,19468 ----
Specific Options for DBX Output
-------------------------------
! These are specific options for DBX output.
`DBX_DEBUGGING_INFO'
Define this macro if GCC should produce debugging output for DBX
*************** File: gccint.info, Node: DBX Hooks, Ne
*** 19571,19577 ****
Open-Ended Hooks for DBX Format
-------------------------------
! These are hooks for DBX format.
`DBX_OUTPUT_LBRAC (STREAM, NAME)'
Define this macro to say how to output to STREAM the debugging
--- 19587,19593 ----
Open-Ended Hooks for DBX Format
-------------------------------
! These are hooks for DBX format.
`DBX_OUTPUT_LBRAC (STREAM, NAME)'
Define this macro to say how to output to STREAM the debugging
*************** File: gccint.info, Node: File Names and
*** 19663,19669 ****
File Names in DBX Format
------------------------
! This describes file names in DBX format.
`DBX_WORKING_DIRECTORY'
Define this if DBX wants to have the current directory recorded in
--- 19679,19685 ----
File Names in DBX Format
------------------------
! This describes file names in DBX format.
`DBX_WORKING_DIRECTORY'
Define this if DBX wants to have the current directory recorded in
*************** File: gccint.info, Node: SDB and DWARF,
*** 19712,19718 ****
Macros for SDB and DWARF Output
-------------------------------
! Here are macros for SDB and DWARF output.
`SDB_DEBUGGING_INFO'
Define this macro if GCC should produce COFF-style debugging output
--- 19728,19734 ----
Macros for SDB and DWARF Output
-------------------------------
! Here are macros for SDB and DWARF output.
`SDB_DEBUGGING_INFO'
Define this macro if GCC should produce COFF-style debugging output
*************** File: gccint.info, Node: VMS Debug, Pr
*** 19806,19812 ****
Macros for VMS Debug Format
---------------------------
! Here are macros for VMS debug format.
`VMS_DEBUGGING_INFO'
Define this macro if GCC should produce debugging output for VMS
--- 19822,19828 ----
Macros for VMS Debug Format
---------------------------
! Here are macros for VMS debug format.
`VMS_DEBUGGING_INFO'
Define this macro if GCC should produce debugging output for VMS
*************** File: gccint.info, Node: Floating Point
*** 19821,19827 ****
Cross Compilation and Floating Point
====================================
! While all modern machines use twos-complement representation for
integers, there are a variety of representations for floating point
numbers. This means that in a cross-compiler the representation of
floating point numbers in the compiled program may be different from
--- 19837,19843 ----
Cross Compilation and Floating Point
====================================
! While all modern machines use twos-complement representation for
integers, there are a variety of representations for floating point
numbers. This means that in a cross-compiler the representation of
floating point numbers in the compiled program may be different from
*************** File: gccint.info, Node: Mode Switching
*** 19925,19931 ****
Mode Switching Instructions
===========================
! The following macros control mode switching optimizations:
`OPTIMIZE_MODE_SWITCHING (ENTITY)'
Define this macro if the port needs extra instructions inserted
--- 19941,19947 ----
Mode Switching Instructions
===========================
! The following macros control mode switching optimizations:
`OPTIMIZE_MODE_SWITCHING (ENTITY)'
Define this macro if the port needs extra instructions inserted
*************** File: gccint.info, Node: Target Attribu
*** 19992,20000 ****
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: const struct attribute_spec * TARGET_ATTRIBUTE_TABLE
If defined, this target hook points to an array of `struct
--- 20008,20016 ----
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: const struct attribute_spec * TARGET_ATTRIBUTE_TABLE
If defined, this target hook points to an array of `struct
*************** File: gccint.info, Node: MIPS Coprocess
*** 20064,20073 ****
Defining coprocessor specifics for MIPS targets.
================================================
! The MIPS specification allows MIPS implementations to have as many as 4
! coprocessors, each with as many as 32 private registers. gcc supports
! accessing these registers and transferring values between the registers
! and memory using asm-ized variables. For example:
register unsigned int cp0count asm ("c0r1");
unsigned int d;
--- 20080,20089 ----
Defining coprocessor specifics for MIPS targets.
================================================
! The MIPS specification allows MIPS implementations to have as many
! as 4 coprocessors, each with as many as 32 private registers. gcc
! supports accessing these registers and transferring values between the
! registers and memory using asm-ized variables. For example:
register unsigned int cp0count asm ("c0r1");
unsigned int d;
*************** File: gccint.info, Node: Misc, Prev: M
*** 20103,20109 ****
Miscellaneous Parameters
========================
! Here are several miscellaneous parameters.
`PREDICATE_CODES'
Define this if you have defined special-purpose predicates in the
--- 20119,20125 ----
Miscellaneous Parameters
========================
! Here are several miscellaneous parameters.
`PREDICATE_CODES'
Define this if you have defined special-purpose predicates in the
*************** Here are several miscellaneous parameter
*** 20412,20418 ****
are silently ignored, unless the user specifies
`-Wunknown-pragmas'.
! - Fonction: void cpp_register_pragma (cpp_reader *PFILE, const
char *SPACE, const char *NAME, void (*CALLBACK)
(cpp_reader *))
Each call to `cpp_register_pragma' establishes one pragma.
--- 20428,20434 ----
are silently ignored, unless the user specifies
`-Wunknown-pragmas'.
! - Function: void cpp_register_pragma (cpp_reader *PFILE, const
char *SPACE, const char *NAME, void (*CALLBACK)
(cpp_reader *))
Each call to `cpp_register_pragma' establishes one pragma.
*************** File: gccint.info, Node: Host Config,
*** 20757,20766 ****
Host Configuration Headers
**************************
! Host configuration headers contain macro definitions that describe the
! machine and system on which the compiler is running. They are usually
! unnecessary. Most of the things GCC needs to know about the host
! system can be deduced by the `configure' script.
If your host does need a special configuration header, it should be
named `xm-MACHINE.h', where MACHINE is a short mnemonic for the
--- 20773,20782 ----
Host Configuration Headers
**************************
! Host configuration headers contain macro definitions that describe
! the machine and system on which the compiler is running. They are
! usually unnecessary. Most of the things GCC needs to know about the
! host system can be deduced by the `configure' script.
If your host does need a special configuration header, it should be
named `xm-MACHINE.h', where MACHINE is a short mnemonic for the
*************** File: gccint.info, Node: Fragments, Ne
*** 20888,20898 ****
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'; *Note System Config::.
Fragments are named either `t-TARGET' or `x-HOST', depending on
--- 20904,20914 ----
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'; *Note System Config::.
Fragments are named either `t-TARGET' or `x-HOST', depending on
*************** File: gccint.info, Node: Target Fragmen
*** 20916,20922 ****
Target Makefile Fragments
=========================
! Target makefile fragments can set these Makefile variables.
`LIBGCC2_CFLAGS'
Compiler flags to use when compiling `libgcc2.c'.
--- 20932,20938 ----
Target Makefile Fragments
=========================
! Target makefile fragments can set these Makefile variables.
`LIBGCC2_CFLAGS'
Compiler flags to use when compiling `libgcc2.c'.
*************** File: gccint.info, Node: Host Fragment,
*** 21034,21041 ****
Host Makefile Fragments
=======================
! The use of `x-HOST' fragments is discouraged. You should do so only if
! there is no other mechanism to get the behavior desired. Host
fragments should never forcibly override variables set by the configure
script, as they may have been adjusted by the user.
--- 21050,21057 ----
Host Makefile Fragments
=======================
! The use of `x-HOST' fragments is discouraged. You should do so only
! if there is no other mechanism to get the behavior desired. Host
fragments should never forcibly override variables set by the configure
script, as they may have been adjusted by the user.
*************** File: gccint.info, Node: Collect2, Nex
*** 21072,21078 ****
`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
--- 21088,21094 ----
`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
*************** File: gccint.info, Node: Header Dirs,
*** 21140,21146 ****
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
--- 21156,21162 ----
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
*************** File: gccint.info, Node: Type Informati
*** 21171,21179 ****
Memory Management and Type Information
**************************************
! GCC uses some fairly sophisticated memory management techniques, which
! involve determining information about GCC's data structures from GCC's
! source code and using this information to perform garbage collection.
A full C parser would be too overcomplicated for this task, so a
limited subset of C is interpreted and special markers are used to
--- 21187,21196 ----
Memory Management and Type Information
**************************************
! GCC uses some fairly sophisticated memory management techniques,
! which involve determining information about GCC's data structures from
! GCC's source code and using this information to perform garbage
! collection.
A full C parser would be too overcomplicated for this task, so a
limited subset of C is interpreted and special markers are used to
*************** File: gccint.info, Node: GTY Options,
*** 21205,21213 ****
The Inside of a `GTY(())'
=========================
! Sometimes the C code is not enough to fully describe the type structure.
! Extra information can be provided by using more `GTY' markers. These
! markers can be placed:
* In a structure definition, before the open brace;
* In a global variable declaration, after the keyword `static' or
--- 21222,21230 ----
The Inside of a `GTY(())'
=========================
! Sometimes the C code is not enough to fully describe the type
! structure. Extra information can be provided by using more `GTY'
! markers. These markers can be placed:
* In a structure definition, before the open brace;
* In a global variable declaration, after the keyword `static' or
*************** File: gccint.info, Node: GGC Roots, Ne
*** 21372,21380 ****
Marking Roots for the Garbage Collector
=======================================
! In addition to keeping track of types, the type machinery also locates
! the global variables that the garbage collector starts at. There are
! two syntaxes it accepts to indicate a root:
1. extern GTY (([options])) [type] ID;
--- 21389,21397 ----
Marking Roots for the Garbage Collector
=======================================
! In addition to keeping track of types, the type machinery also
! locates the global variables that the garbage collector starts at.
! There are two syntaxes it accepts to indicate a root:
1. extern GTY (([options])) [type] ID;
*************** File: gccint.info, Node: Files, Prev:
*** 21393,21399 ****
Source Files Containing Type Information
========================================
! Whenever you add `GTY' markers to a new source file, there are three
things you need to do:
1. You need to add the file to the list of source files the type
--- 21410,21416 ----
Source Files Containing Type Information
========================================
! Whenever you add `GTY' markers to a new source file, there are three
things you need to do:
1. You need to add the file to the list of source files the type
*************** File: gccint.info, Node: Funding, Next
*** 21452,21458 ****
Funding Free Software
*********************
! If you want to have more free software a few years from now, it makes
sense for you to help encourage people to contribute funds for its
development. The most effective approach known is to encourage
commercial redistributors to donate.
--- 21469,21475 ----
Funding Free Software
*********************
! If you want to have more free software a few years from now, it makes
sense for you to help encourage people to contribute funds for its
development. The most effective approach known is to encourage
commercial redistributors to donate.
*************** File: gccint.info, Node: GNU Project,
*** 21502,21508 ****
The GNU Project and GNU/Linux
*****************************
! The GNU Project was launched in 1984 to develop a complete Unix-like
operating system which is free software: the GNU system. (GNU is a
recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".)
Variants of the GNU operating system, which use the kernel Linux, are
--- 21519,21525 ----
The GNU Project and GNU/Linux
*****************************
! The GNU Project was launched in 1984 to develop a complete Unix-like
operating system which is free software: the GNU system. (GNU is a
recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".)
Variants of the GNU operating system, which use the kernel Linux, are
*************** GNU GENERAL PUBLIC LICENSE
*** 21529,21537 ****
Preamble
========
! The licenses for most software are designed to take away your freedom
! to share and change it. By contrast, the GNU General Public License is
! intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
--- 21546,21554 ----
Preamble
========
! The licenses for most software are designed to take away your
! freedom to share and change it. By contrast, the GNU General Public
! License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
*************** modification follow.
*** 21812,21818 ****
How to Apply These Terms to Your New Programs
=============================================
! If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these
terms.
--- 21829,21835 ----
How to Apply These Terms to Your New Programs
=============================================
! If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these
terms.
*************** GNU Free Documentation License
*** 22276,22282 ****
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 page:
--- 22293,22299 ----
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 page:
*************** File: gccint.info, Node: Contributors,
*** 22310,22316 ****
Contributors to GCC
*******************
! The GCC project would like to thank its many contributors. Without
them the project would not have been nearly as successful as it has
been. Any omissions in this list are accidental. Feel free to contact
or if you have been left out or
--- 22327,22333 ----
Contributors to GCC
*******************
! The GCC project would like to thank its many contributors. Without
them the project would not have been nearly as successful as it has
been. Any omissions in this list are accidental. Feel free to contact
or if you have been left out or
*************** File: gccint.info, Node: Option Index,
*** 23133,23140 ****
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.
--- 23150,23157 ----
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
*** 23505,23510 ****
--- 23522,23528 ----
* clobber: Side Effects.
* clrstrM instruction pattern: Standard Names.
* cmpM instruction pattern: Standard Names.
+ * cmpmemM instruction pattern: Standard Names.
* cmpstrM instruction pattern: Standard Names.
* code generation RTL sequences: Expander Definitions.
* code motion: Passes.
*************** Index
*** 25383,25577 ****
Tag Table:
! Node: Top2154
! Node: Contributing4703
! Node: Portability5446
! Node: Interface7250
! Node: Languages11492
! Node: Source Tree13042
! Node: Configure Terms13657
! Node: Top Level16616
! Node: gcc Directory18736
! Node: Subdirectories19699
! Node: Configuration21998
! Node: Config Fragments22645
! Node: System Config23734
! Node: Configuration Files24021
! Node: Build26693
! Node: Makefile27093
! Node: Library Files30484
! Node: Headers31034
! Node: Documentation33009
! Node: Texinfo Manuals33798
! Node: Man Page Generation35916
! Node: Miscellaneous Docs37821
! Node: Front End39162
! Node: Front End Directory42592
! Node: Front End Config47100
! Node: Back End49840
! Node: Test Suites53047
! Node: Test Idioms53733
! Node: C Tests56798
! Node: libgcj Tests60922
! Node: gcov Testing62348
! Node: profopt Testing65278
! Node: compat Testing66713
! Node: Passes70055
! Node: Trees94396
! Node: Deficiencies97122
! Node: Tree overview97351
! Node: Macros and Functions101483
! Node: Identifiers101617
! Node: Containers103134
! Node: Types104278
! Node: Scopes117001
! Node: Namespaces117757
! Node: Classes120561
! Node: Declarations125159
! Node: Functions131215
! Node: Function Basics133745
! Node: Function Bodies140492
! Node: Attributes154376
! Node: Expression trees155609
! Node: RTL180568
! Node: RTL Objects182599
! Node: RTL Classes186487
! Node: Accessors191105
! Node: Flags193485
! Node: Machine Modes209620
! Node: Constants218350
! Node: Regs and Memory224310
! Node: Arithmetic237355
! Node: Comparisons244011
! Node: Bit-Fields248136
! Node: Vector Operations249554
! Node: Conversions251329
! Node: RTL Declarations254636
! Node: Side Effects255445
! Node: Incdec271304
! Node: Assembler274638
! Node: Insns276160
! Node: Calls301648
! Node: Sharing304242
! Node: Reading RTL307342
! Node: Machine Desc308325
! Node: Overview310601
! Node: Patterns312640
! Node: Example316070
! Node: RTL Template317501
! Node: Output Template329966
! Node: Output Statement333948
! Node: Constraints337919
! Node: Simple Constraints338850
! Node: Multi-Alternative351230
! Node: Class Preferences354065
! Node: Modifiers354945
! Node: Machine Constraints358705
! Node: Standard Names379973
! Ref: prologue instruction pattern420551
! Ref: epilogue instruction pattern421044
! Node: Pattern Ordering423495
! Node: Dependent Patterns424721
! Node: Jump Patterns427536
! Node: Looping Patterns433283
! Node: Insn Canonicalizations437886
! Node: Expander Definitions441701
! Node: Insn Splitting449833
! Node: Including Patterns459464
! Node: Peephole Definitions461232
! Node: define_peephole462479
! Node: define_peephole2468825
! Node: Insn Attributes471886
! Node: Defining Attributes472980
! Node: Expressions474992
! Node: Tagging Insns481580
! Node: Attr Example485942
! Node: Insn Lengths488318
! Node: Constant Attributes491578
! Node: Delay Slots492738
! Node: Processor pipeline description495965
! Node: Old pipeline description499928
! Node: Automaton pipeline description505642
! Node: Comparison of the two descriptions517946
! Node: Conditional Execution519924
! Node: Constant Definitions522780
! Node: Target Macros524358
! Node: Target Structure527118
! Node: Driver528406
! Node: Run-time Target546955
! Node: Per-Function Data556704
! Node: Storage Layout559513
! Node: Type Layout582025
! Node: Escape Sequences592772
! Node: Registers593684
! Node: Register Basics594604
! Node: Allocation Order600206
! Node: Values in Registers601619
! Node: Leaf Functions606451
! Node: Stack Registers609237
! Node: Register Classes610034
! Node: Stack and Calling632672
! Node: Frame Layout633165
! Node: Exception Handling640027
! Node: Stack Checking645379
! Node: Frame Registers648933
! Node: Elimination654382
! Node: Stack Arguments658352
! Node: Register Arguments665905
! Node: Scalar Return677335
! Node: Aggregate Return681411
! Node: Caller Saves685125
! Node: Function Entry686662
! Node: Profiling699366
! Node: Tail Calls700970
! Node: Varargs701561
! Node: Trampolines709236
! Node: Library Calls716468
! Node: Addressing Modes722306
! Node: Condition Code733604
! Node: Costs742729
! Node: Scheduling755153
! Node: Sections767685
! Node: PIC778023
! Node: Assembler Format780821
! Node: File Framework781888
! Node: Data Output786745
! Node: Uninitialized Data794340
! Node: Label Output799737
! Node: Initialization818523
! Node: Macros for Initialization824501
! Node: Instruction Output830667
! Node: Dispatch Tables839710
! Node: Exception Region Output842262
! Node: Alignment Output845922
! Node: Debugging Info849940
! Node: All Debuggers850598
! Node: DBX Options853478
! Node: DBX Hooks858850
! Node: File Names and DBX862671
! Node: SDB and DWARF864644
! Node: VMS Debug868687
! Node: Floating Point869232
! Node: Mode Switching874032
! Node: Target Attributes877279
! Node: MIPS Coprocessors881125
! Node: Misc882686
! Node: Host Config913786
! Node: Fragments919819
! Node: Target Fragment920960
! Node: Host Fragment926408
! Node: Collect2927842
! Node: Header Dirs930393
! Node: Type Information931817
! Node: GTY Options932835
! Node: GGC Roots939422
! Node: Files940121
! Node: Funding942964
! Node: GNU Project945472
! Node: Copying946123
! Node: GNU Free Documentation License965328
! Node: Contributors987737
! Node: Option Index1014422
! Node: Index1016219
End Tag Table
--- 25401,25595 ----
Tag Table:
! Node: Top2133
! Node: Contributing4685
! Node: Portability5431
! Node: Interface7238
! Node: Languages11483
! Node: Source Tree13036
! Node: Configure Terms13654
! Node: Top Level16617
! Node: gcc Directory18740
! Node: Subdirectories19706
! Node: Configuration22008
! Node: Config Fragments22658
! Node: System Config23750
! Node: Configuration Files24040
! Node: Build26715
! Node: Makefile27118
! Node: Library Files30509
! Node: Headers31062
! Node: Documentation33040
! Node: Texinfo Manuals33833
! Node: Man Page Generation35954
! Node: Miscellaneous Docs37862
! Node: Front End39206
! Node: Front End Directory42639
! Node: Front End Config47150
! Node: Back End49893
! Node: Test Suites53103
! Node: Test Idioms53792
! Node: C Tests56860
! Node: libgcj Tests60987
! Node: gcov Testing62416
! Node: profopt Testing65349
! Node: compat Testing66787
! Node: Passes70132
! Node: Trees94476
! Node: Deficiencies97205
! Node: Tree overview97438
! Node: Macros and Functions101573
! Node: Identifiers101710
! Node: Containers103230
! Node: Types104377
! Node: Scopes117102
! Node: Namespaces117861
! Node: Classes120668
! Node: Declarations125269
! Node: Functions131328
! Node: Function Basics133861
! Node: Function Bodies140611
! Node: Attributes154501
! Node: Expression trees155737
! Node: RTL180699
! Node: RTL Objects182733
! Node: RTL Classes186624
! Node: Accessors191245
! Node: Flags193628
! Node: Machine Modes209766
! Node: Constants218499
! Node: Regs and Memory224462
! Node: Arithmetic237510
! Node: Comparisons244169
! Node: Bit-Fields248297
! Node: Vector Operations249718
! Node: Conversions251496
! Node: RTL Declarations254806
! Node: Side Effects255618
! Node: Incdec271480
! Node: Assembler274817
! Node: Insns276342
! Node: Calls301833
! Node: Sharing304430
! Node: Reading RTL307534
! Node: Machine Desc308520
! Node: Overview310799
! Node: Patterns312841
! Node: Example316274
! Node: RTL Template317708
! Node: Output Template330176
! Node: Output Statement334161
! Node: Constraints338135
! Node: Simple Constraints339069
! Node: Multi-Alternative351452
! Node: Class Preferences354290
! Node: Modifiers355173
! Node: Machine Constraints358936
! Node: Standard Names380207
! Ref: prologue instruction pattern421234
! Ref: epilogue instruction pattern421727
! Node: Pattern Ordering424178
! Node: Dependent Patterns425408
! Node: Jump Patterns428226
! Node: Looping Patterns433976
! Node: Insn Canonicalizations438582
! Node: Expander Definitions442400
! Node: Insn Splitting450535
! Node: Including Patterns460169
! Node: Peephole Definitions461943
! Node: define_peephole463193
! Node: define_peephole2469542
! Node: Insn Attributes472606
! Node: Defining Attributes473703
! Node: Expressions475718
! Node: Tagging Insns482310
! Node: Attr Example486675
! Node: Insn Lengths489054
! Node: Constant Attributes492316
! Node: Delay Slots493479
! Node: Processor pipeline description496709
! Node: Old pipeline description500676
! Node: Automaton pipeline description506393
! Node: Comparison of the two descriptions518700
! Node: Conditional Execution520681
! Node: Constant Definitions523540
! Node: Target Macros525121
! Node: Target Structure527884
! Node: Driver529175
! Node: Run-time Target547727
! Node: Per-Function Data557479
! Node: Storage Layout560291
! Node: Type Layout582807
! Node: Escape Sequences593557
! Node: Registers594472
! Node: Register Basics595395
! Node: Allocation Order601000
! Node: Values in Registers602416
! Node: Leaf Functions607251
! Node: Stack Registers610040
! Node: Register Classes610840
! Node: Stack and Calling633479
! Node: Frame Layout633975
! Node: Exception Handling640840
! Node: Stack Checking646192
! Node: Frame Registers649749
! Node: Elimination655201
! Node: Stack Arguments659174
! Node: Register Arguments666730
! Node: Scalar Return678163
! Node: Aggregate Return682242
! Node: Caller Saves685959
! Node: Function Entry687499
! Node: Profiling700206
! Node: Tail Calls701813
! Node: Varargs702404
! Node: Trampolines710082
! Node: Library Calls717317
! Node: Addressing Modes723158
! Node: Condition Code734459
! Node: Costs743587
! Node: Scheduling756014
! Node: Sections768549
! Node: PIC778890
! Node: Assembler Format781691
! Node: File Framework782761
! Node: Data Output787621
! Node: Uninitialized Data795216
! Node: Label Output800616
! Node: Initialization819405
! Node: Macros for Initialization825386
! Node: Instruction Output831555
! Node: Dispatch Tables840601
! Node: Exception Region Output843156
! Node: Alignment Output846819
! Node: Debugging Info850840
! Node: All Debuggers851501
! Node: DBX Options854384
! Node: DBX Hooks859759
! Node: File Names and DBX863583
! Node: SDB and DWARF865559
! Node: VMS Debug869605
! Node: Floating Point870153
! Node: Mode Switching874956
! Node: Target Attributes878206
! Node: MIPS Coprocessors882056
! Node: Misc883620
! Node: Host Config914723
! Node: Fragments920759
! Node: Target Fragment921902
! Node: Host Fragment927353
! Node: Collect2928790
! Node: Header Dirs931344
! Node: Type Information932771
! Node: GTY Options933792
! Node: GGC Roots940383
! Node: Files941084
! Node: Funding943930
! Node: GNU Project946441
! Node: Copying947095
! Node: GNU Free Documentation License966306
! Node: Contributors988718
! Node: Option Index1015406
! Node: Index1017206
End Tag Table
diff -Nrc3pad gcc-3.3.4/gcc/doc/gcov.1 gcc-3.3.5/gcc/doc/gcov.1
*** gcc-3.3.4/gcc/doc/gcov.1 2004-05-31 22:43:10.000000000 +0000
--- gcc-3.3.5/gcc/doc/gcov.1 2004-09-30 17:38:13.000000000 +0000
***************
*** 1,8 ****
! .\" Automatically generated by Pod::Man version 1.15
! .\" Mon May 31 22:43:10 2004
.\"
.\" Standard preamble:
! .\" ======================================================================
.de Sh \" Subsection heading
.br
.if t .Sp
--- 1,7 ----
! .\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.13
.\"
.\" Standard preamble:
! .\" ========================================================================
.de Sh \" Subsection heading
.br
.if t .Sp
***************
*** 15,26 ****
.if t .sp .5v
.if n .sp
..
- .de Ip \" List item
- .br
- .ie \\n(.$>=3 .ne \\$3
- .el .ne 3
- .IP "\\$1" \\$2
- ..
.de Vb \" Begin verbatim text
.ft CW
.nf
--- 14,19 ----
***************
*** 28,42 ****
..
.de Ve \" End verbatim text
.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. | will give a
! .\" real vertical bar. \*(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-|\(bv\*(Tr
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
--- 21,34 ----
..
.de Ve \" End verbatim text
.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. | will give a
! .\" real vertical bar. \*(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-|\(bv\*(Tr
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
***************
*** 56,65 ****
. ds R" ''
'br\}
.\"
! .\" If the F register is turned on, we'll generate index entries on stderr
! .\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and
! .\" index entries marked with X<> in POD. Of course, you'll have to process
! .\" the output yourself in some meaningful fashion.
.if \nF \{\
. de IX
. tm Index:\\$1\t\\n%\t"\\$2"
--- 48,57 ----
. ds R" ''
'br\}
.\"
! .\" If the F register is turned on, we'll generate index entries on stderr for
! .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
! .\" entries marked with X<> in POD. Of course, you'll have to process the
! .\" output yourself in some meaningful fashion.
.if \nF \{\
. de IX
. tm Index:\\$1\t\\n%\t"\\$2"
***************
*** 68,81 ****
. rr F
.\}
.\"
! .\" For nroff, turn off justification. Always turn off hyphenation; it
! .\" makes way too many mistakes in technical documents.
.hy 0
.if n .na
.\"
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
.\" Fear. Run. Save yourself. No user-serviceable parts.
- .bd B 3
. \" fudge factors for nroff and troff
.if n \{\
. ds #H 0
--- 60,72 ----
. rr F
.\}
.\"
! .\" For nroff, turn off justification. Always turn off hyphenation; it makes
! .\" way too many mistakes in technical documents.
.hy 0
.if n .na
.\"
.\" 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
***************
*** 135,157 ****
. ds Ae AE
.\}
.rm #[ #] #H #V #F C
! .\" ======================================================================
.\"
.IX Title "GCOV 1"
! .TH GCOV 1 "gcc-3.3.4" "2004-05-31" "GNU"
! .UC
.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\-b\fR|\fB\*(--branch-probabilities\fR]
! [\fB\-c\fR|\fB\*(--branch-counts\fR]
! [\fB\-n\fR|\fB\*(--no-output\fR]
! [\fB\-l\fR|\fB\*(--long-file-names\fR]
! [\fB\-p\fR|\fB\*(--preserve-paths\fR]
! [\fB\-f\fR|\fB\*(--function-summaries\fR]
! [\fB\-o\fR|\fB\*(--object-directory\fR \fIdirectory|file\fR] \fIsourcefile\fR
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
\&\fBgcov\fR is a test coverage program. Use it in concert with \s-1GCC\s0
--- 126,147 ----
. ds Ae AE
.\}
.rm #[ #] #H #V #F C
! .\" ========================================================================
.\"
.IX Title "GCOV 1"
! .TH GCOV 1 "2004-09-30" "gcc-3.3.5" "GNU"
.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\-b\fR|\fB\-\-branch\-probabilities\fR]
! [\fB\-c\fR|\fB\-\-branch\-counts\fR]
! [\fB\-n\fR|\fB\-\-no\-output\fR]
! [\fB\-l\fR|\fB\-\-long\-file\-names\fR]
! [\fB\-p\fR|\fB\-\-preserve\-paths\fR]
! [\fB\-f\fR|\fB\-\-function\-summaries\fR]
! [\fB\-o\fR|\fB\-\-object\-directory\fR \fIdirectory|file\fR] \fIsourcefile\fR
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
\&\fBgcov\fR is a test coverage program. Use it in concert with \s-1GCC\s0
*************** time.
*** 166,176 ****
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 "\(bu" 4
how often each line of code executes
! .Ip "\(bu" 4
what lines of code are actually executed
! .Ip "\(bu" 4
how much computing time each section of code uses
.PP
Once you know these things about how your code works when compiled, you
--- 156,166 ----
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 "\(bu" 4
how often each line of code executes
! .IP "\(bu" 4
what lines of code are actually executed
! .IP "\(bu" 4
how much computing time each section of code uses
.PP
Once you know these things about how your code works when compiled, you
*************** timing information you can use along wit
*** 208,269 ****
compatible with any other profiling or test coverage mechanism.
.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\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\fR version number (on the standard output),
and exit without doing any further processing.
! .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.
! .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\-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.
! .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
header file \fIx.h\fR contains code, and was included in the file
\&\fIa.c\fR, then running \fBgcov\fR on the file \fIa.c\fR will produce
an output file called \fIa.c##x.h.gcov\fR instead of \fIx.h.gcov\fR.
This can be useful if \fIx.h\fR is included in multiple source files.
! .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
\&\fI.gcov\fR files. Without this option, just the filename component is
--- 198,259 ----
compatible with any other profiling or test coverage mechanism.
.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\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\fR version number (on the standard output),
and exit without doing any further processing.
! .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.
! .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\-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.
! .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
header file \fIx.h\fR contains code, and was included in the file
\&\fIa.c\fR, then running \fBgcov\fR on the file \fIa.c\fR will produce
an output file called \fIa.c##x.h.gcov\fR instead of \fIx.h.gcov\fR.
This can be useful if \fIx.h\fR is included in multiple source files.
! .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
\&\fI.gcov\fR files. Without this option, just the filename component is
*************** used. With this option, all directories
*** 271,290 ****
translated to '#' characters, '.' directory components removed and '..'
components renamed to '^'. This is useful if sourcefiles are in several
different directories. It also affects the \fB\-l\fR option.
! .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\-o\fR \fIdirectory|file\fR" 4
.IX Item "-o directory|file"
.PD 0
! .Ip "\fB\*(--object-directory\fR \fIdirectory\fR" 4
! .IX Item "object-directory directory"
! .Ip "\fB\*(--object-file\fR \fIfile\fR" 4
! .IX Item "object-file file"
.PD
Specify either the directory containing the gcov data files, or the
object path name. The \fI.bb\fR, \fI.bbg\fR, and
--- 261,280 ----
translated to '#' characters, '.' directory components removed and '..'
components renamed to '^'. This is useful if sourcefiles are in several
different directories. It also affects the \fB\-l\fR option.
! .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\-o\fR \fIdirectory|file\fR" 4
.IX Item "-o directory|file"
.PD 0
! .IP "\fB\-\-object\-directory\fR \fIdirectory\fR" 4
! .IX Item "--object-directory directory"
! .IP "\fB\-\-object\-file\fR \fIfile\fR" 4
! .IX Item "--object-file file"
.PD
Specify either the directory containing the gcov data files, or the
object path name. The \fI.bb\fR, \fI.bbg\fR, and
*************** format is
*** 307,314 ****
.Vb 1
\& ::