GCC 4.3 Release Series
Changes, New Features, and Fixes
The latest release in the 4.3 release series is
- GCC requires the GMP and MPFR libraries for building all
the various front-end languages it supports. See the prerequisites
page for version requirements.
- ColdFire targets now treat long double as having
the same format as double. In earlier versions of GCC,
they used the 68881 long double format instead.
- The m68k-uclinux target now uses the same
calling conventions as m68k-linux-gnu. You can
select the original calling conventions by configuring for
m68k-uclinuxoldabi instead. Note that
m68k-uclinuxoldabi also retains the original
80-bit long double on ColdFire targets.
- The -fforce-mem option has been removed
because it has had no effect in the last few GCC releases.
- The i386 -msvr3-shlib option has been removed
since it is no longer used.
- Fastcall for i386 has been changed not to pass
aggregate arguments in registers, following Microsoft compilers.
- Support for the AOF assembler has been removed from the ARM
back end; this affects only the targets arm-semi-aof
and armel-semi-aof, which are no longer recognized.
We removed these targets without a deprecation period because we
discovered that they have been unusable since GCC 4.0.0.
- Support for the TMS320C3x/C4x processor (targets
c4x-* and tic4x-*) has been removed.
This support had been deprecated since GCC 4.0.0.
Support for a number of older systems and recently
unmaintained or untested target ports of GCC has been declared
obsolete in GCC 4.3. Unless there is activity to revive them, the
next release of GCC will have their sources permanently
All GCC ports for the following processor architectures have
been declared obsolete:
The following aliases for processor architectures have been
declared obsolete. Users should use the indicated generic target
names instead, with compile-time options such as
-mcpu or configure-time options such as
--with-cpu to control the configuration more
- strongarm*-*-*, ep9312*-*-*,
xscale*-*-* (use arm*-*-*
- parisc*-*-* (use hppa*-*-*
- m6800-*-* (use m68k-*-*
All GCC ports for the following operating systems have been
- BeOS (*-*-beos*)
- kaOS (*-*-kaos*)
- GNU/Linux using the a.out object format
- GNU/Linux using version 1 of the GNU C Library
- Solaris versions before Solaris 7
- Miscellaneous System V (*-*-sysv*)
- WindISS (*-*-windiss*)
Also, those for some individual systems on particular
architectures have been obsoleted:
- UNICOS/mk on DEC Alpha
- CRIS with a.out object format
- BSD 4.3 on PA-RISC (hppa1.1-*-bsd*)
- OSF/1 on PA-RISC (hppa1.1-*-osf*)
- PRO on PA-RISC (hppa1.1-*-pro*)
- Sequent PTX on IA32 (i86-sequent-ptx4*,
- SCO Open Server 5 on IA32
- UWIN on IA32 (i86-*-uwin*) (support for
UWIN as a host was previously removed
in 2001, leaving only the support for UWIN as a target now
- ChorusOS on PowerPC (powerpc-*-chorusos*)
- All VAX configurations apart from NetBSD and OpenBSD
- The -Wconversion option has been modified. Its purpose now
is to warn for implicit conversions that may alter a value. This
new behavior is available for both C and C++. Warnings about
conversions between signed and unsigned integers can be disabled
by using -Wno-sign-conversion. In C++, they are
disabled by default unless -Wsign-conversion is
explicitly requested. The old behavior of
-Wconversion, that is, warn for prototypes causing a
type conversion that is different from what would happen to the
same argument in the absence of a prototype, has been moved to a
new option -Wtraditional-conversion, which is only
available for C.
- The -m386, -m486, -mpentium and
-mpentiumpro tuning options have been removed because
they were deprecated for more than 3 GCC major releases. Use
-mtune=pentium or -mtune=pentiumpro as a
- The -funsafe-math-optimizations option now automatically
turns on -fno-trapping-math in addition to
-fno-signed-zeros, as it enables reassociation and thus
may introduce or remove traps.
- The -ftree-vectorize option is now on by default under
-O3. In order to generate code for a SIMD extension, it
has to be enabled as well: use -maltivec for PowerPC
platforms and -msse/-msse2 for i?86 and x86_64.
- More information on porting to GCC 4.3 from previous versions
of GCC can be found in
guide for this release.
General Optimizer Improvements
- The GCC middle-end has been integrated with the
MPFR library. This allows GCC
to evaluate and replace at compile-time calls to built-in math
functions having constant arguments with their mathematically
equivalent results. In making use of MPFR, GCC can generate correct
results regardless of the math library implementation or floating
point precision of the host platform. This also allows GCC to
generate identical results regardless of whether one compiles in
native or cross-compile configurations to a particular target.
The following built-in functions take advantage of this new
capability: acos, acosh,
asin, asinh, atan2,
atan, atanh, cbrt,
cos, cosh, drem,
erf, erfc, exp10,
exp2, exp, expm1,
fdim, fma, fmax,
fmin, gamma_r, hypot,
j0, j1, jn,
lgamma_r, log10, log1p,
log2, log, pow10,
pow, remainder, remquo,
sin, sincos, sinh,
tan, tanh, tgamma,
y0, y1 and yn. The
float and long double variants of these
functions (e.g. sinf and sinl) are also
handled. The sqrt and cabs functions
with constant arguments were already optimized in prior GCC
releases. Now they also use MPFR.
- A new forward propagation pass on RTL was added. The new pass
replaces several slower transformations, resulting in compile-time
improvements as well as better code generation in some cases.
- A new command-line switch -frecord-gcc-switches has been
added to GCC, although it is only enabled for some targets. The switch
causes the command line that was used to invoke the compiler to be recorded
into the object file that is being created. The exact format of this
recording is target and binary file format dependent, but it usually takes
the form of a note section containing ASCII text. The switch is related to
the -fverbose-asm switch, but that one only records the
information in the assembler output file as comments, so the information
never reaches the object file.
- The inliner heuristic is now aware of stack frame consumption. New
command-line parameters --param large-stack-frame
and --param large-stack-frame-growth
can be used to limit stack frame size growth caused by inlining.
- During feedback directed optimizations, the expected block size
the memcpy, memset and bzero
functions operate on is discovered and for cases of commonly used small
sizes, specialized inline code is generated.
- __builtin_expect no longer requires its argument to be
a compile time constant.
- Interprocedural optimization was reorganized to work on
functions in SSA form. This enables more precise and cheaper dataflow
analysis and makes writing interprocedural optimizations easier. The
following improvements have been implemented on top of this
- Pre-inline optimization: Selected local optimization passes are
run before the inliner (and other interprocedural passes) are
executed. This significantly improves the accuracy of code growth
estimates used by the inliner and reduces the overall memory
footprint for large compilation units.
- Early inlining (a simple bottom-up inliner pass inlining only
functions whose body is smaller than the expected call overhead)
is now executed with the early optimization passes, thus inlining
already optimized function bodies into an unoptimized function
that is subsequently optimized by early optimizers. This enables
the compiler to quickly eliminate abstraction penalty in C++
- Interprocedural constant propagation now operate on SSA form
increasing accuracy of the analysis.
- A new internal representation for GIMPLE statements has been
contributed, resulting in compile-time memory savings.
- The vectorizer was enhanced to support vectorization of outer loops,
intra-iteration parallelism (loop-aware SLP), vectorization of strided
accesses and loops with multiple data-types. Run-time dependency
testing using loop versioning was added. The cost model, turned on by
-fvect-cost-model, was developed.
New Languages and Language specific improvements
- We have added new command-line options
-finstrument-functions-exclude-file-list. They provide
more control over which functions are annotated
by the -finstrument-functions option.
Implicit conversions between generic vector types are now
only permitted when the two vectors in question have the same number
of elements and compatible element types. (Note that the restriction
involves compatible element types, not
implicitly-convertible element types: thus, a vector type with element
type int may not be implicitly converted to a vector
type with element type unsigned int.)
This restriction, which is in line with specifications for SIMD
architectures such as AltiVec, may be relaxed using the
This flag is intended only as a compatibility measure and should not
be used for new code.
-Warray-bounds has been added and is now enabled by
default for -Wall . It produces warnings for array
subscripts that can be determined at compile time to be always
out of bounds. -Wno-array-bounds will disable the
The constructor and destructor function
attributes now accept optional priority arguments which control
the order in which the constructor and destructor functions are
New command-line options -Wtype-limits,
-Wclobbered and -Wignored-qualifiers
have been added for finer control of the diverse warnings enabled by
A new function attribute alloc_size has been added to
mark up malloc style functions. For constant sized
allocations this can be used to find out the size of the returned
pointer using the __builtin_object_size() function
for buffer overflow checking and similar.
This supplements the already built-in malloc and
calloc constant size handling.
Integer constants written in binary are now supported as a GCC
extension. They consist of a prefix 0b or
0B, followed by a sequence of 0 and 1 digits.
A new predefined macro __COUNTER__ has been added.
It expands to sequential integral values starting from 0. In
conjunction with the ## operator, this provides a
convenient means to generate unique identifiers.
A new command-line option -fdirectives-only has been
added. It enables a special preprocessing mode which improves the
performance of applications like distcc and ccache.
Fixed-point data types and operators have been added.
They are based on Chapter 4 of the Embedded-C specification (n1169.pdf).
Currently, only MIPS targets are supported.
Decimal floating-point arithmetic based on draft ISO/IEC TR 24732,
N1241, is now supported as a GCC extension to C for targets
s390*-ibm-linux-gnu, and x86_64-*-linux-gnu.
The feature introduces new data types _Decimal32,
_Decimal64, and _Decimal128 with constant
suffixes DF, DD, and DL.
- Experimental support for the upcoming
ISO C++ standard, C++0x.
- -Wc++0x-compat has been added and is now enabled by
default for -Wall. It produces warnings for constructs
whose meaning differs between ISO C++ 1998 and C++0x.
- The -Wparentheses option now works for C++ as it
does for C. It warns if parentheses are omitted when operators with
confusing precedence are nested. It also warns about ambiguous else
statements. Since -Wparentheses is enabled by
-Wall, this may cause additional warnings with existing
C++ code which uses -Wall. These new warnings may be
disabled by using -Wall -Wno-parentheses.
- The -Wmissing-declarations now works for C++ as it
does for C.
- The -fvisibility-ms-compat flag was added, to make it
easier to port larger projects using shared libraries from Microsoft's
Visual Studio to ELF and Mach-O systems.
- C++ attribute handling has been overhauled for template
arguments (ie dependent types). In particular,
__attribute__((aligned(T))); works for C++ types.
Runtime Library (libstdc++)
- Experimental support for the upcoming
ISO C++ standard, C++0x.
- Support for TR1 mathematical special functions and regular
expressions. The implementation status for TR1 can be tracked in
- Default what implementations give more elaborate
exception strings for bad_cast,
bad_typeid, bad_exception, and
- Header dependencies have been streamlined, reducing
unnecessary includes and pre-processed bloat.
- Variadic template implementations of items in and
- An experimental
parallel mode has been added. This is a parallel
implementation of many C++ Standard library algorithms, like
std::transform, or std::sort, to give
but four examples. These algorithms can be substituted for the normal
(sequential) libstdc++ algorithms on a piecemeal basis, or
all existing algorithms can be transformed via the
- Debug mode versions of classes in and
- Formal deprecation of and
, which are now and
. This code:
Can be transformed (in order of preference) to:
Similar transformations apply to __gnu_cxx::hash_map,
- Due to the fact that the GMP and MPFR libraries are required for
all languages, Fortran is no longer special in this regard and is
available by default.
- The -fexternal-blas option has been added, which
generates calls to BLAS routines for intrinsic matrix operations such
as matmul rather than using the built-in algorithms.
- Support to give a backtrace (compiler flag -fbacktrace
or environment variable GFORTRAN_ERROR_BACKTRACE; on glibc
systems only) or a core dump (-fdump-core,
GFORTRAN_ERROR_DUMPCORE) when a run-time error occured.
- GNU Fortran now defines __GFORTRAN__ when it runs the C
- The -finit-local-zero, -finit-real,
-finit-integer, -finit-character, and
-finit-logical options have been added, which can be
used to initialize local variables.
- The intrinsic procedures GAMMA
have been added, which calculate the Gamma function and
its logarithm. Use EXTERNAL gamma if you want to use your
own gamma function.
- GNU Fortran now regards the backslash character as literal
(as required by the Fortran 2003 standard); using
-fbackslash GNU Fortran interprets backslashes as
C-style escape characters.
interpretation of binary, octal and hexadecimal (BOZ) literal constants
has been changed. Before they were always interpreted as integer; now they
are bit-wise transferred as argument of INT, REAL, DBLE and CMPLX as
required by the Fortran 2003 standard, and for real and complex variables
in DATA statements or when directly assigned to real and complex variables.
Everywhere else and especially in expressions they are still regarded
as integer constants.
- Fortran 2003 support has been extended:
- Intrinsic statements IMPORT, PROTECTED, VALUE and VOLATILE
- Pointer intent
- Intrinsic module ISO_ENV_FORTRAN
- Interoperability with C (ISO C Bindings)
- ABSTRACT INTERFACES and PROCEDURE statements (without POINTER
- Fortran 2003 BOZ
- gcj now uses the Eclipse Java compiler for its Java parsing
needs. This enables the use of all 1.5 language features, and
fixes most existing front end bugs.
- libgcj now supports all 1.5 language features which require
runtime support: foreach, enum, annotations, generics, and
- We've made many changes to the tools shipped
- The old jv-scan tool has been removed. This
tool never really worked properly. There is no replacement.
- gcjh has been rewritten. Some of its more
obscure options no longer work, but are still recognized in an
attempt at compatibility. gjavah is a new program
with similar functionality but different command-line options.
- grmic and grmiregistry have been
rewritten. grmid has been added.
- gjar replaces the old fastjar.
- gjarsigner (used for signing jars),
gkeytool (used for key management),
gorbd (for CORBA), gserialver (computes
serialization UIDs), and gtnameserv (also for CORBA)
are now installed.
- The ability to dump the contents of the java run time heap to
a file for off-line analysis has been added. The heap dumps may
be analyzed with the new gc-analyze tool. They may
be generated on out-of-memory conditions or on demand and are
controlled by the new run time class
- java.util.TimeZone can now read files from
/usr/share/zoneinfo to provide correct, updated,
timezone information. This means that packagers no longer have
to update libgcj when a time zone change is published.
New Targets and Target Specific Improvements
- Tuning for Intel Core 2 processors is available via
-mtune=core2 and -march=core2.
- Tuning for AMD Geode processors is available via
-mtune=geode and -march=geode.
- Code generation of block move (memcpy) and block set
(memset) was rewritten. GCC can now pick the best
algorithm (loop, unrolled loop, instruction with rep
prefix or a library call) based on the size of the block being
copied and the CPU being optimized for. A new option
-minline-stringops-dynamically has been added. With
this option string operations of unknown size are expanded such
that small blocks are copied by in-line code, while for
large blocks a library call is used. This results in faster code than
-minline-all-stringops when the library implementation is
capable of using cache hierarchy hints. The heuristic choosing
the particular algorithm can be overwritten via
-mstringop-strategy. Newly also memset of
values different from 0 is inlined.
- GCC no longer places the cld instruction before string
operations. Both i386 and x86-64 ABI documents mandate the direction
flag to be clear at the entry of a function. It is now invalid to
set the flag in asm statement without reseting it
- Support for SSSE3 built-in functions and code generation are
available via -mssse3.
- Support for SSE4.1 built-in functions and code generation are
available via -msse4.1.
- Support for SSE4.2 built-in functions and code generation are
available via -msse4.2.
- Both SSE4.1 and SSE4.2 support can be enabled via
- A new set of options -mpc32, -mpc64
and -mpc80 have been added to allow explicit control
of x87 floating point precision.
- Support for __float128 (TFmode) IEEE quad type and
corresponding TCmode IEEE complex quad type is available
via the soft-fp library on x86_64 targets.
This includes basic arithmetic operations (addition, subtraction,
negation, multiplication and division) on __float128
real and TCmode complex values, the full set of IEEE comparisons
between __float128 values, conversions to and from
float, double and long double
floating point types, as well as conversions to and from
signed or unsigned integer,
signed or unsigned long integer and
signed or unsigned quad (TImode) integer
types. Additionally, all operations generate the full set of IEEE
exceptions and support the full set of IEEE rounding modes.
- GCC can now utilize the ACML library for vectorizing calls to
a set of C99 functions on x86_64 if -mveclibabi=acml
is specified and you link to an ACML ABI compatible library.
- Compiler and Library support for Thumb-2 and the ARMv7
architecture has been added.
- Compiler and Library support for the CRIS v32 architecture, as
found in Axis Communications ETRAX FS and ARTPEC-3 chips, has
- The cris-*-elf target now includes support for
CRIS v32, including libraries, through the
- A new crisv32-*-elf target defaults to generate
code for CRIS v32.
- A new crisv32-*-linux* target defaults to generate
code for CRIS v32.
- The cris-*-aout target has been obsoleted.
Improved support for built-in functions
- GCC can now use the lz and
swapwbr instructions to implement the
__builtin_clz, __builtin_ctz and
__builtin_ffs family of functions.
- __builtin_bswap32 is now implemented using the
swapwb instruction, when available.
m68k and ColdFire
- Support for several new ColdFire processors has been added.
You can generate code for them using the new -mcpu
- All targets now support ColdFire processors.
- m68k-uclinux targets have improved support for
C++ constructors and destructors, and for shared libraries.
- It is now possible to set breakpoints on the first or last line
of a function, even if there are no statements on that line.
- Support for sibling calls has been added.
- More use is now made of the ColdFire mov3q
- __builtin_clz is now implemented using the
ff1 ColdFire instruction, when available.
- GCC now honors the -m68010 option. 68010 code
now uses clr rather than move to
zero volatile memory.
- 68020 targets and above can now use
symbol(index.size*scale) addresses for
indexed array accesses. Earlier compilers would always
load the symbol into a base register first.
- All m68k and ColdFire targets now allow the default processor
to be set at configure time using --with-cpu.
- A --with-arch configuration option has been added.
This option allows you to restrict a target to ColdFire or
- An __mcfv*__ macro is now defined for all ColdFire
targets. (Earlier versions of GCC only defined
- __mcf_cpu_*, __mcf_family_* and
__mcffpu__ macros have been added.
- All targets now define __mc68010 and
__mc68010__ when generating 68010 code.
- New command-line options -march, -mcpu,
-mtune and -mhard-float have been added.
These options apply to both m68k and ColdFire targets.
- -mno-short, -mno-bitfield and
-mno-rtd are now accepted as negative versions
of -mshort, etc.
- -fforce-addr has been removed. It is now ignored
by the compiler.
- ColdFire targets now try to maintain a 4-byte-aligned
stack where possible.
- m68k-uclinux targets now try to avoid
situations that lead to the load-time error:
BINFMT_FLAT: reloc outside program.
Changes to existing configurations
- libffi and libjava now support all
three GNU/Linux ABIs: o32, n32 and n64. Every GNU/Linux
configuration now builds these libraries by default.
- GNU/Linux configurations now generate -mno-shared
code unless overridden by -fpic,
-fPIC, -fpie or
- mipsisa32*-linux-gnu configurations now generate
hard-float code by default, just like other mipsisa32*
and mips*-linux-gnu configurations. You can
build a soft-float version of any mips*-linux-gnu
configuration by passing --with-float=soft to
- mips-wrs-vxworks now supports run-time processes
Changes to existing command-line options
- The -march and -mtune options no
longer accept 24k as a processor name. Please
use 24kc, 24kf2_1 or
- The -march and -mtune options now
accept 24kf2_1, 24kef2_1 and
34kf2_1 as synonyms for 24kf,
24kef and 34kf respectively.
The options also accept 24kf1_1,
24kef1_1 and 34kf1_1 as synonyms for
24kx, 24kex and 34kx.
GCC now supports the following configurations:
- mipsisa32r2*-linux-gnu*, which generates MIPS32
revision 2 code by default. Earlier releases also recognized
this configuration, but they treated it in the same way as
mipsisa32*-linux-gnu*. Note that you can
customize any mips*-linux-gnu* configuration
to a particular ISA or processor by passing an appropriate
--with-arch option to configure.
- mipsisa*-sde-elf*, which provides compatibility
with MIPS Technologies' SDE toolchains. The configuration
uses the SDE libraries by default, but you can use it like
other newlib-based ELF configurations by passing
--with-newlib to configure. It is
the only configuration besides mips64vr*-elf* to
build MIPS16 as well as non-MIPS16 libraries.
- mipsisa*-elfoabi*, which is similar to the general
mipsisa*-elf* configuration, but uses the o32 and
o64 ABIs instead of the 32-bit and 64-bit forms of the EABI.
New processors and application-specific extensions
- Support for the SmartMIPS ASE is available through the
new -msmartmips option.
- Support for revision 2 of the DSP ASE is available through
the new -mdspr2 option. A new preprocessor macro
called __mips_dsp_rev indicates the revision of
the ASE in use.
- Support for the 4KS and 74K families of processors is
available through the -march and -mtune
Improved support for built-in functions
- GCC can now use load-linked, store-conditional and
sync instructions to implement atomic built-in
functions such as __sync_fetch_and_add. The
memory reference must be 4 bytes wide for 32-bit targets and
either 4 or 8 bytes wide for 64-bit targets.
- GCC can now use the clz and dclz
instructions to implement the __builtin_ctz and
__builtin_ffs families of functions.
- There is a new __builtin___clear_cache function
for flushing the instruction cache. GCC expands this function
inline on MIPS32 revision 2 targets, otherwise it calls the
function specified by -mcache-flush-func.
- GCC can now compile objects that contain a mixture of MIPS16
and non-MIPS16 code. There are two new attributes,
mips16 and nomips16, for specifying
which mode a function should use.
- A new option called -minterlink-mips16
makes non-MIPS16 code link-compatible with MIPS16 code.
- After many bug fixes, the long-standing MIPS16
-mhard-float support should now work fairly
- GCC can now use the MIPS16e save and
- -fsection-anchors now works in MIPS16 mode.
MIPS16 code compiled with -G0
-fsection-anchors is often smaller than code
compiled with -G8. However, please note that you
must usually compile all objects in your application with the
same -G option; see the documentation of
-G for details.
- A new option called-mcode-readable specifies
which instructions are allowed to load from the code segment.
-mcode-readable=yes is the default and says that
any instruction may load from the code segment. The other
alternatives are -mcode-readable=pcrel, which
says that only PC-relative MIPS16 instructions may load from
the code segment, and -mcode-readable=no, which
says that no instruction may do so. Please see the
documentation for more details, including example uses.
There are three new options for controlling small data:
- -mno-extern-sdata, which disables small-data
accesses for externally-defined variables. Code compiled
with -Gn -mno-extern-sdata will be
link-compatible with any -G setting between
-G0 and -Gn inclusive.
- -mno-local-sdata, which disables the use of
small-data sections for data that is not externally visible.
This option can be a useful way of reducing small-data usage
in less performance-critical parts of an application.
- -mno-gpopt, which disables the use of the
$gp register while still honoring the
-G limit when placing externally-visible data.
This option implies -mno-extern-sdata and
-mno-local-sdata and it can be useful in
situations where $gp does not necessarily hold
the expected value.
- There is a new option called -mbranch-cost
for tweaking the perceived cost of branches.
- If GCC is configured to use a version of GAS that supports
the .gnu_attribute directive, it will use that
directive to record certain properties of the output code.
.gnu_attribute is new to GAS 2.18.
- There are two new function attributes, near
and far, for overriding the command-line setting
of -mlong-calls on a function-by-function
- -mfp64, which previously required a 64-bit target,
now works with MIPS32 revision 2 targets as well. The
mipsisa*-elfoabi* and mipsisa*-sde-elf*
configurations provide suitable library support.
- GCC now recognizes the -mdmx and -mmt
options and passes them down to the assembler. It does nothing
else with the options at present.
SPU (Synergistic Processor Unit) of the Cell Broadband Engine
- Support has been added for this new architecture.
- Support for the PowerPC 750CL paired-single instructions has
been added with a new powerpc-*-linux*paired* target
configuration. It is enabled by an associated -mpaired
option and can be accessed using new built-in functions.
- Support for auto-detecting architecture and system configuration
to auto-select processor optimization tuning.
- Support for VMX on AIX 5.3 has been added.
- Support for AIX Version 6.1 has been added.
S/390, zSeries and System z9
- Support for the IBM System z9 EC/BC processor (z9 GA3) has
been added. When using the -march=z9-ec option,
the compiler will generate code making use of instructions
provided by the decimal floating point facility and the
floating point conversion facility (pfpo). Besides the
instructions used to implement decimal floating point
operations these facilities also contain instructions to move
between general purpose and floating point registers and to
modify and copy the sign-bit of floating point values.
- When the -march=z9-ec option is used the new
-mhard-dfp/-mno-hard-dfp options can be used to
specify whether the decimal floating point hardware
instructions will be used or not. If none of them is given
the hardware support is enabled by default.
- The -mstack-guard option can now be omitted when
using stack checking via -mstack-size in order to
let GCC choose a sensible stack guard value according to the
frame size of each function.
- Various changes to improve performance of generated code have been
- The condition code set by an add logical with carry
instruction is now available for overflow checks
like: a + b + carry < b.
- The test data class instruction is now used to implement
sign-bit and infinity checks of binary and decimal floating
- Stack unwinding for exception handling now uses by default a
specialized version of DWARF unwinding. This is not
binary-compatible with the setjmp/longjmp (sjlj) unwinding used
for Xtensa with previous versions of GCC.
- For Xtensa processors that include the Conditional Store option,
the built-in functions for atomic memory access are now implemented
using S32C1I instructions.
- If the Xtensa NSA option is available, GCC will use it to implement
the __builtin_ctz and __builtin_clz
Other significant improvements
The compiler's --help command-line option has
been extended so that it now takes an optional set of arguments.
These arguments restrict the information displayed to specific
classes of command-line options, and possibly only a subset of
those options. It is also now possible to replace the descriptive
text associated with each displayed option with an indication of
its current value, or for binary options, whether it has been
enabled or disabled.
Here are some examples. The following will display all the
options controlling warning messages:
Whereas this will display all the undocumented, target specific
This sequence of commands will display the binary
optimizations that are enabled by -O3:
gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
diff /tmp/O2-opts /tmp/O3-opts | grep enabled
- The configure options --with-pkgversion and
--with-bugurl have been added. These allow
distributors of GCC to include a distributor-specific string in
manuals and --version output and to specify the URL
for reporting bugs in their versions of GCC.
This is the list
of problem reports (PRs) from GCC's bug tracking system that are
known to be fixed in the 4.3.1 release. This list might not be
complete (that is, it is possible that some PRs that have been fixed
are not listed here).
Target Specific Changes
- Starting with GCC 4.3.1, decimal floating point variables are
aligned to their natural boundaries when they are passed on the
stack for i386.
- Starting with GCC 4.3.1, the -mcld option has been
added to automatically generate a cld instruction in the
prologue of functions that use string instructions. This option is
used for backward compatibility on some operating systems and can
be enabled by default on 32-bit x86 targets by configuring GCC with
the --enable-cld configure option.
Please send FSF & GNU inquiries & questions to
There are also other ways
to contact the FSF.
These pages are maintained by
the GCC team.
For questions related to the use of GCC, please consult these web
pages and the GCC manuals. If
that fails, the firstname.lastname@example.org
mailing list might help.
Please send comments on these web pages and the development of GCC to our
developer mailing list at email@example.com
or firstname.lastname@example.org. All of our lists
have public archives.
Copyright (C) Free Software Foundation, Inc.,
51 Franklin St, Fifth Floor, Boston, MA 02110, USA.
Verbatim copying and distribution of this entire article is
permitted in any medium, provided this notice is preserved.