GCC:由GNU之父Stallman所开发的linux下的编译器,全称为GNU Compiler Collection, 目前可以编译的语言包括:C, C++, Objective-C, Fortran, Java以及Ada。
GCC 4.3.0是一个大的版本,包含了大量GCC 4.2.x以及之前的GCC版本所不具备的功能。

发布程序的程序在 gcc/gcc-4.3.0/ 子目录下
具体的变更信息可以查看:

GCC 4.3 Release Series
Changes, New Features, and Fixes
Caveats
- 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 asdouble
. In earlier versions of GCC, they used the 68881long double
format instead. - The
m68k-uclinux
target now uses the same calling conventions asm68k-linux-gnu
. You can select the original calling conventions by configuring form68k-uclinuxoldabi
instead. Note thatm68k-uclinuxoldabi
also retains the original 80-bitlong 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
andarmel-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-*
andtic4x-*
) 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 removed.
All GCC ports for the following processor architectures have been declared obsolete:
- National Semiconductor CRX (
crx-*
) - Morpho MT (
mt-*
)
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 precisely.strongarm*-*-*
,ep9312*-*-*
,xscale*-*-*
(usearm*-*-*
instead).parisc*-*-*
(usehppa*-*-*
instead).m680[012]0-*-*
(usem68k-*-*
instead).
All GCC ports for the following operating systems have been declared obsolete:
- BeOS (
*-*-beos*
) - kaOS (
*-*-kaos*
) - GNU/Linux using the a.out object format (
*-*-linux*aout*
) - GNU/Linux using version 1 of the GNU C Library (
*-*-linux*libc1*
) - Solaris versions before Solaris 7 (
*-*-solaris2.[0-6]
,*-*-solaris2.[0-6].*
) - Miscellaneous System V (
*-*-sysv*
) - WindISS (
*-*-windiss*
)
Also, those for some individual systems on particular architectures have been obsoleted:
- UNICOS/mk on DEC Alpha (
alpha*-*-unicosmk*
) - CRIS with a.out object format (
cris-*-aout
) - 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 (
i[34567]86-sequent-ptx4*
,i[34567]86-sequent-sysv4*
) - SCO Open Server 5 on IA32 (
i[34567]86-*-sco3.2v5*
) - UWIN on IA32 (
i[34567]86-*-uwin*
) (support for UWIN as a host was previously removed in 2001, leaving only the support for UWIN as a target now being deprecated) - ChorusOS on PowerPC (
powerpc-*-chorusos*
) - All VAX configurations apart from NetBSD and OpenBSD (
vax-*-bsd*
,vax-*-sysv*
,vax-*-ultrix*
)
- National Semiconductor CRX (
- 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=i386
,-mtune=i486
,-mtune=pentium
or-mtune=pentiumpro
as a replacement. - 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. - More information on porting to GCC 4.3 from previous versions of GCC can be found in the porting 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
andyn
. Thefloat
andlong double
variants of these functions (e.g.sinf
andsinl
) are also handled. Thesqrt
andcabs
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
andbzero
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 framework:
- 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++ programs.
- 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.
New Languages and Language specific improvements
- We have added new command-line options
-finstrument-functions-exclude-function-list
and-finstrument-functions-exclude-file-list
. They provide more control over which functions are annotated by the-finstrument-functions
option.
C family
- 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 typeunsigned int
.) This restriction, which is in line with specifications for SIMD architectures such as AltiVec, may be relaxed using the flag-flax-vector-conversions
. 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 warning. - The
constructor
anddestructor
function attributes now accept optional priority arguments which control the order in which the constructor and destructor functions are run. - New command-line options
-Wtype-limits
,-Wold-style-declaration
,-Wmissing-parameter-type
,-Wempty-body
,-Wclobbered
and-Wignored-qualifiers
have been added for finer control of the diverse warnings enabled by-Wextra
. - A new function attribute
alloc_size
has been added to mark upmalloc
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-inmalloc
andcalloc
constant size handling. - Integer constants written in binary are now supported as a GCC extension. They consist of a prefix
0b
or0B
, 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.
C++
- 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 tr1.html
- Default
what
implementations give more elaborate exception strings forbad_cast
,bad_typeid
,bad_exception
, andbad_alloc
. - Header dependencies have been streamlined, reducing unnecessary includes and pre-processed bloat.
- Variadic template implementations of items in <tuple> and <functional>.
- An experimental parallel mode has been added. This is a parallel implementation of many C++ Standard library algorithms, like
std::accumulate
,std::for_each
,std::transform
, orstd::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-D_GLIBCXX_PARALLEL
macro. - Debug mode versions of classes in <unordered_set> and <unordered_map>.
- Formal deprecation of <ext/hash_set> and <ext/hash_map>, which are now <backward/hash_set> and <backward/hash_map>. This code:
#include <ext/hash_set>
Can be transformed (in order of preference) to:
__gnu_cxx::hash_set<int> s;
#include <tr1/unordered_set>
or
std::tr1::unordered_set<int> s;
#include <backward/hash_set>
Similar transformations apply to
__gnu_cxx::hash_set<int> s;
__gnu_cxx::hash_map
,__gnu_cxx::hash_multimap
,__gnu_cxx::hash_set
,__gnu_cxx::hash_multiset
.
Fortran
- 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 asmatmul
rather than using the built-in algorithms. - Support to give a backtrace (compiler flag
-fbacktrace
or environment variableGFORTRAN_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 preprocessor (CPP). - 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
andLGAMMA
have been added, which calculate the Gamma function and its logarithm. UseEXTERNAL 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. - The 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 attribute)
- Fortran 2003 BOZ
Java (GCJ)
- 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 auto-boxing.
- We've made many changes to the tools shipped with gcj.
- 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
andgrmiregistry
have been rewritten.grmid
has been added. -
gjar
replaces the oldfastjar
. -
gjarsigner
(used for signing jars),gkeytool
(used for key management),gorbd
(for CORBA),gserialver
(computes serialization UIDs), andgtnameserv
(also for CORBA) are now installed.
- The old
- 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 classgnu.gcj.util.GCInfo
. -
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
IA-32/x86-64
- 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 withrep
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 alsomemset
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 inasm
statement without reseting it afterward. - 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
-msse4
. - 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 onx86_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 fromfloat
,double
andlong double
floating point types, as well as conversions to and fromsigned
orunsigned
integer,signed
orunsigned long
integer andsigned
orunsigned
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.
ARM
- Compiler and Library support for Thumb-2 and the ARMv7 architecture has been added.
CRIS
New features
- Compiler and Library support for the CRIS v32 architecture, as found in Axis Communications ETRAX FS and ARTPEC-3 chips, has been added.
Configuration changes
- The
cris-*-elf
target now includes support for CRIS v32, including libraries, through the-march=v32
option. - 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
andswapwbr
instructions to implement the__builtin_clz
,__builtin_ctz
and__builtin_ffs
family of functions. __builtin_bswap32
is now implemented using theswapwb
instruction, when available.
m68k and ColdFire
New features
- Support for several new ColdFire processors has been added. You can generate code for them using the new
-mcpu
option. - 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.
Optimizations
- Support for sibling calls has been added.
- More use is now made of the ColdFire
mov3q
instruction. __builtin_clz
is now implemented using theff1
ColdFire instruction, when available.- GCC now honors the
-m68010
option. 68010 code now usesclr
rather thanmove
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.
Configuration changes
- 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 non-ColdFire processors.
Preprocessor macros
- An
__mcfv*__
macro is now defined for all ColdFire targets. (Earlier versions of GCC only defined__mcfv4e__
.) __mcf_cpu_*
,__mcf_family_*
and__mcffpu__
macros have been added.- All targets now define
__mc68010
and__mc68010__
when generating 68010 code.
Command-line changes
- 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.
Other improvements
- 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
.
MIPS
Changes to existing configurations
libffi
andlibjava
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-fPIE
. mipsisa32*-linux-gnu
configurations now generate hard-float code by default, just like othermipsisa32*
andmips*-linux-gnu
configurations. You can build a soft-float version of anymips*-linux-gnu
configuration by passing--with-float=soft
toconfigure
.mips-wrs-vxworks
now supports run-time processes (RTPs).
Changes to existing command-line options
- The
-march
and-mtune
options no longer accept24k
as a processor name. Please use24kc
,24kf2_1
or24kf1_1
instead. - The
-march
and-mtune
options now accept24kf2_1
,24kef2_1
and34kf2_1
as synonyms for24kf
,24kef
and34kf
respectively. The options also accept24kf1_1
,24kef1_1
and34kf1_1
as synonyms for24kx
,24kex
and34kx
.
New configurations
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 asmipsisa32*-linux-gnu*
. Note that you can customize anymips*-linux-gnu*
configuration to a particular ISA or processor by passing an appropriate--with-arch
option toconfigure
.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
toconfigure
. It is the only configuration besidesmips64vr*-elf*
to build MIPS16 as well as non-MIPS16 libraries.mipsisa*-elfoabi*
, which is similar to the generalmipsisa*-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
options.
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
anddclz
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
.
MIPS16 improvements
- GCC can now compile objects that contain a mixture of MIPS16 and non-MIPS16 code. There are two new attributes,
mips16
andnomips16
, 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 reliably. - GCC can now use the MIPS16e
save
andrestore
instructions. -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.
Small-data improvements
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.
Miscellaneous improvements
- 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
andfar
, for overriding the command-line setting of-mlong-calls
on a function-by-function basis. -mfp64
, which previously required a 64-bit target, now works with MIPS32 revision 2 targets as well. Themipsisa*-elfoabi*
andmipsisa*-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 Architecture (BEA)
- Support has been added for this new architecture.
RS6000 (POWER/PowerPC)
- 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 implemented, including:
- 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 point numbers.
- The condition code set by an add logical with carry instruction is now available for overflow checks like:
Xtensa
- 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
functions.
Documentation improvements
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:
--help=warnings
Whereas this will display all the undocumented, target specific options:
--help=target,undocumented
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.
Please send FSF & GNU inquiries & questions to gnu@gnu.org. 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 gcc-help@gcc.gnu.org mailing list might help.Please send comments on these web pages and the development of GCC to our developer mailing list at gcc@gnu.org or gcc@gcc.gnu.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.
Last modified 2008-02-28 | ![]() |