GCC 2.95 New Features
- General Optimizer Improvements:
- New Languages and Language specific improvements
- New Targets and Target Specific Improvements
- SPARC back end rewrite.
- -mschedule=8000 will optimize code for PA8000 class processors;
-mpa-risc-2-0 will generate code for PA2.0 processors
- Various micro-optimizations for the ia32 port. K6 optimizations
- Compiler will attempt to align doubles in the stack on the ia32 port
- Alpha EV6 support
- PowerPC 750
- RS6000/PowerPC: -mcpu=401 was added as an alias for -mcpu=403.
-mcpu=e603e was added to do -mcpu=603e and -msoft-float.
- c3x, c4x
- HyperSPARC
- SparcLite86x
- sh4
- Support for new systems (OpenBSD, FreeBSD, UWIN, Interix, arm-linux)
- vxWorks targets include support for vxWorks threads
- StrongARM 110 and ARM9 support added. ARM Scheduling parameters
rewritten.
- Various changes to the MIPS port to avoid assembler macros, which
in turn improves performance
- Various performance improvements to the i960 port.
- Major rewrite of ns32k port
- Other significant improvements
- Ability to dump cfg information and
display it using vcg.
- The new faster scheme for fixing vendor header files is enabled by
default.
- Experimental internationalization support.
- multibyte character support
- Some compile-time speedups for pathological problems
- Better support for complex types
- Plus the usual mountain of bugfixes
- Core compiler is based on the gcc2 development tree from Sept 30, 1998,
so we have all of the features
found in GCC 2.8.
Additional Changes in GCC 2.95.1
- Generic bugfixes and improvements
- Various documentation fixes related to the GCC/EGCS merger.
- Fix memory management bug which could lead to spurious aborts, core
dumps or random parsing errors in the compiler.
- Fix a couple bugs in the dwarf1 and dwarf2 debug record support.
- Fix infinite loop in the CSE optimizer.
- Avoid undefined behavior in compiler FP emulation code
- Fix install problem when prefix is overridden on the make install
command.
- Fix problem with unwanted installation of assert.h on some systems.
- Fix problem with finding the wrong assembler in a single tree
build.
- Avoid increasing the known alignment of a register that is
already known to be a pointer.
- Platform specific bugfixes and improvements
- Codegen bugfix for prologue/epilogue for cpu32 target.
- Fix long long code generation bug for the Coldfire target.
- Fix various aborts in the SH compiler.
- Fix bugs in libgcc support library for the SH.
- Fix alpha ev6 code generation bug.
- Fix problems with EXIT_SUCCESS/EXIT_FAILURE redefinitions on AIX
platforms.
- Fix -fpic code generation bug for rs6000/ppc svr4 targets.
- Fix varargs/stdarg code generation bug for rs6000/ppc svr4 targets.
- Fix weak symbol handling for rs6000/ppc svr4 targets.
- Fix various problems with 64bit code generation for the rs6000/ppc
port.
- Fix codegen bug which caused tetex to be mis-compiled on the x86.
- Fix compiler abort in new cfg code exposed by x86 port.
- Fix out of range array reference in code convert flat
registers to the x87 stacked FP register file.
- Fix minor vxworks configuration bug.
- Fix return type of bsearch for SunOS 4.x.
- Language & Runtime specific fixes.
- The G++ signature extension has been deprecated. It will be
removed in the next major release of G++. Use of signatures
will result in a warning from the compiler.
- Several bugs relating to templates and namespaces were fixed.
- A bug that caused crashes when combining templates with -g
on DWARF1 platforms was fixed.
- Pointers-to-members, virtual functions, and multiple
inheritance should now work together correctly.
- Some code-generation bugs relating to function try blocks
were fixed.
- G++ is a little bit more lenient with certain archaic
constructs than in GCC 2.95.
- Fix to prevent shared library version #s from bring truncated
to 1 digit
- Fix missing std:: in the libstdc++ library.
- Fix stream locking problems in libio.
- Fix problem in java compiler driver.
Additional Changes in GCC 2.95.2
The -fstrict-aliasing is not enabled by default for GCC 2.95.2. While the
optimizations performed by -fstrict-aliasing are valid according to the C and
C++ standards, the optimization have caused some problems, particularly with
old non-conforming code.
The GCC developers are experimenting with ways to warn users about code
which violates the C/C++ standards, but those warnings are not ready for
widespread use at this time. Rather than wait for those warnings the GCC
developers have chosen to disable -fstrict-aliasing by default for the
GCC 2.95.2 release.
We strongly encourage developers to find and fix
code which violates the C/C++ standards as -fstrict-aliasing may be
enabled by default in future releases. Use the option
-fstrict-aliasing to re-enable these optimizations.
- Generic bugfixes and improvements
- Fix incorrectly optimized memory reference in global common
subexpression elimination (GCSE) optimization pass.
- Fix code generation bug in regmove.c in which it could
incorrectly change a "const" value.
- Fix bug in optimization of conditionals involving volatile
memory references.
- Avoid over-allocation of stack space for some procedures.
- Fixed bug in the compiler which caused incorrect optimization
of an obscure series of bit manipulations, shifts and arithmetic.
- Fixed register allocator bug which caused teTeX to be mis-compiled
on SPARC targets.
- Avoid incorrect optimization of degenerate case statements for
certain targets such as the ARM.
- Fix out of range memory reference in the jump optimizer.
- Avoid dereferencing null pointer in fix-header.
- Fix test for GCC specific features so that it is possible
to bootstrap with gcc-2.6.2 and older versions of GCC.
- Fix typo in scheduler which could potentially cause out of
range memory accesses.
- Avoid incorrect loop reversal which caused incorrect code for
certain loops on PowerPC targets.
- Avoid incorrect optimization of switch statements on certain
targets (for example the ARM).
- Platform specific bugfixes and improvements
- Work around bug in Sun V5.0 compilers which caused bootstrap
comparison failures on SPARC targets.
- Fix SPARC back end bug which caused aborts in final.c.
- Fix sparc-hal-solaris2* configuration fragments.
- Fix bug in sparc block profiling.
- Fix obscure code generation bug for the PARISC targets.
- Define __STDC_EXT__ for HPUX configurations.
- Various POWERPC64 code generation bugfixes.
- Fix abort for PPC targets using ELF (ex GNU/Linux).
- Fix collect2 problems for AIX targets.
- Correct handling of .file directive for PPC targets.
- Fix bug in fix_trunc x86 patterns.
- Fix x86 port to correctly pop the FP stack for functions that
return structures in memory.
- Fix minor bug in strlen x86 pattern.
- Use stabs debugging instead of dwarf1 for x86-solaris targets.
- Fix template repository code to handle leading underscore
in mangled names.
- Fix weak/weak alias support for OpenBSD.
- GNU/Linux for the ARM has C++ compatible include files.
- Language & Runtime specific fixes.
- Fix handling of constructor attribute in the C front-end
which caused problems building the Chill runtime library
on some targets.
- Fix minor problem merging type qualifiers in the C front-end.
- Fix aliasing bug for pointers and references (C/C++).
- Fix incorrect "non-constant initializer bug" when
-traditional or -fwritable-strings is enabled.
- Fix build error for Chill front-end on SunOS.
- Do not complain about duplicate instantiations when using
-frepo (C++).
- Fix array bounds handling in C++ front-end which caused
problems with dwarf debugging information in some circumstances.
- Fix minor namespace problem.
- Fix problem linking java programs.
Additional Changes in GCC 2.95.3
- Generic bugfixes and improvements
- Fix numerous problems that caused incorrect optimization in the
register reloading code.
- Fix numerous problems that caused incorrect optimization in the
loop optimizer.
- Fix aborts in the functions build_insn_chain and scan_loops
under some circumstances.
- Fix an alias analysis bug.
- Fix an infinite compilation bug in the combiner.
- A few problems with complex number support have been fixed.
- It is no longer possible for gcc to act as a fork bomb when
installed incorrectly.
- The -fpack-struct option should be recognized now.
- Fixed a bug that caused incorrect code to be generated due to
a lost stack adjustment.
- Platform specific bugfixes and improvements
- Support building ARM toolchains hosted on Windows.
- Fix attribute calculations in ARM toolchains.
- arm-linux support has been improved.
- Fix a PIC failure on sparc targets.
- On ix86 targets, the regparm attribute should now work reliably.
- Several updates for the h8300 port.
- Fix problem building libio with glibc 2.2.