~ubuntu-branches/ubuntu/precise/gccgo-4.7/precise

« back to all changes in this revision

Viewing changes to debian/NEWS.html

  • Committer: Package Import Robot
  • Author(s): Matthias Klose
  • Date: 2012-03-11 19:37:32 UTC
  • Revision ID: package-import@ubuntu.com-20120311193732-ty08ntcphseuouao
Tags: 4.7.0~rc1-0ubuntu1
* Build standalone gccgo-4.7 packages.
* libgo: Work around parse error of struct timex_ on ARM.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?xml version="1.0" encoding="ISO-8859-1"?>
 
2
  <!DOCTYPE html
 
3
            PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 
4
            "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
5
 
 
6
 
 
7
 
 
8
 
 
9
 
 
10
 
 
11
 
 
12
 
 
13
 
 
14
 
 
15
 
 
16
 
 
17
 
 
18
 
 
19
 
 
20
 
 
21
 
 
22
     <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 
23
  
 
24
  
 
25
   <head>
 
26
 
 
27
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
 
28
    <link rev="made" href="mailto:gcc@gcc.gnu.org" />
 
29
    <link rel="shortcut icon" href="http://gcc.gnu.org/favicon.ico" />
 
30
    <link rel="stylesheet" type="text/css" href="/gnu.css" />
 
31
    <link rel="stylesheet" type="text/css" href="http://gcc.gnu.org/gcc.css" />
 
32
  
 
33
 <title>
 
34
GCC 4.6 Release Series &mdash; Changes, New Features, and Fixes
 
35
- GNU Project - Free Software Foundation (FSF)</title>
 
36
   </head>
 
37
 
 
38
 
 
39
<!-- GCC maintainers, please do not hesitate to update/contribute entries
 
40
     concerning those part of GCC you maintain!  2002-03-23, Gerald.
 
41
-->
 
42
 
 
43
<body bgcolor="#FFFFFF" text="#000000" link="#1F00FF" alink="#FF0000" vlink="#9900DD">
 
44
 
 
45
 
 
46
 
 
47
<h1 align="center">
 
48
GCC 4.6 Release Series<br />Changes, New Features, and Fixes
 
49
</h1>
 
50
 
 
51
<h2>Caveats</h2>
 
52
  <ul>
 
53
 
 
54
    <li>The options <code>-b &lt;<em>machine</em>&gt;</code> and
 
55
    <code>-V &lt;<em>version</em>&gt;</code> have been removed because
 
56
    they were unreliable. Instead, users should directly run
 
57
    <code>&lt;<em>machine</em>&gt;-gcc</code> when cross-compiling, or
 
58
    <code>&lt;<em>machine</em>&gt;-gcc-&lt;<em>version</em>&gt;</code>
 
59
    to run a different version of <code>gcc</code>. </li>
 
60
 
 
61
    <li>GCC now has stricter checks for invalid command-line options.
 
62
    In particular, when <code>gcc</code> was called to link object
 
63
    files rather than compile source code, it would previously accept
 
64
    and ignore all options starting with <code>--</code>, including
 
65
    linker options such as <code>--as-needed</code>
 
66
    and <code>--export-dynamic</code>, although such options would
 
67
    result in errors if any source code was compiled.  Such options,
 
68
    if unknown to the compiler, are now rejected in all cases; if the
 
69
    intent was to pass them to the linker, options such
 
70
    as <code>-Wl,--as-needed</code> should be used.</li>
 
71
 
 
72
    <li>Versions of the GNU C library up to and including 2.11.1
 
73
    included an <a
 
74
    href="http://sourceware.org/bugzilla/show_bug.cgi?id=10401">incorrect
 
75
    implementation of the <code>cproj</code> function</a>.  GCC
 
76
    optimizes its builtin <code>cproj</code> according to the behavior
 
77
    specified and allowed by the ISO C99 standard.  If you want to
 
78
    avoid discrepancies between the C library and GCC's builtin
 
79
    transformations when using <code>cproj</code> in your code, use
 
80
    GLIBC 2.12 or later.  If you are using an older GLIBC and actually
 
81
    rely on the incorrect behavior of cproj, then you can disable
 
82
    GCC's transformations using <code>-fno-builtin-cproj</code>. </li>
 
83
 
 
84
    <li>The C-only intermodule optimization framework (IMA, enabled by
 
85
    <code>-combine</code>) has been removed in favor of the new
 
86
    generic link-time optimization framework (LTO) introduced
 
87
    in <a href="../gcc-4.5/changes.html">GCC 4.5.0</a>.</li>
 
88
 
 
89
    <li id="libquadmath">GCC now ships with the LGPL-licensed
 
90
    <code>libquadmath</code> library, which provides quad-precision
 
91
    mathematical functions for targets with a <code>__float128</code>
 
92
    datatype. <code>__float128</code> is available for targets on
 
93
    32-bit x86, x86-64 and Itanium architectures. The
 
94
    <code>libquadmath</code> library is automatically built on
 
95
    such targets when building the Fortran compiler.</li>
 
96
 
 
97
    <li>New <code>-Wunused-but-set-variable</code> and
 
98
    <code>-Wunused-but-set-parameter</code> warnings were added
 
99
    for C, C++, Objective-C and Objective-C++.
 
100
    These warnings diagnose variables respective parameters which
 
101
    are only set in the code and never otherwise used.
 
102
    Usually such variables are useless and often even the value
 
103
    assigned to them is computed needlessly, sometimes expensively.
 
104
    The <code>-Wunused-but-set-variable</code> warning is enabled by
 
105
    default by <code>-Wall</code> flag and <code>-Wunused-but-set-parameter</code>
 
106
    by <code>-Wall -Wextra</code> flags.</li>
 
107
 
 
108
    <li><p>Support for a number of older systems and recently
 
109
    unmaintained or untested target ports of GCC has been declared
 
110
    obsolete in GCC 4.6.  Unless there is activity to revive them, the
 
111
    next release of GCC will have their sources permanently
 
112
    <strong>removed</strong>.</p>
 
113
 
 
114
    <p id="obsoleted">All GCC ports for the following processor
 
115
    architectures have been declared obsolete:</p>
 
116
 
 
117
    <ul>
 
118
      <li>Argonaut ARC (<code>arc-*</code>)</li>
 
119
      <li>National Semiconductor CRX (<code>crx-*</code>)</li>
 
120
      <li>Motorola 68HC11 and 68HC12
 
121
      (<code>m68hc11-*-*</code>, <code>m6811-*-*</code>,
 
122
      <code>m68hc12-*-*</code>, <code>m6812-*-*</code>)</li>
 
123
      <li>Sunplus S+core (<code>score-*</code>)</li>
 
124
    </ul>
 
125
 
 
126
    <p>The following ports for individual systems on
 
127
    particular architectures have been obsoleted:</p>
 
128
 
 
129
    <ul>
 
130
      <li>Interix (<code>i[34567]86-*-interix3*</code>)</li>
 
131
      <li>Generic ARM PE (<code>arm-*-pe*</code> other
 
132
      than <code>arm*-wince-pe*</code>)</li>
 
133
      <li>MCore PE (<code>mcore-*-pe*</code>)</li>
 
134
      <li>SH SymbianOS (<code>sh*-*-symbianelf*</code>)</li>
 
135
      <li>GNU Hurd on Alpha and PowerPC
 
136
      (<code>alpha*-*-gnu*</code>, <code>powerpc*-*-gnu*</code>)</li>
 
137
      <li>M68K uClinux old ABI
 
138
      (<code>m68k-*-uclinuxoldabi*</code>)</li>
 
139
      <li>a.out NetBSD
 
140
      (<code>arm*-*-netbsd*</code>, <code>i[34567]86-*-netbsd*</code>,
 
141
      <code>vax-*-netbsd*</code>, but
 
142
      not <code>*-*-netbsdelf*</code>)</li>
 
143
    </ul>
 
144
 
 
145
    <p>The <code>i[34567]86-*-pe</code> alias for Cygwin targets has
 
146
    also been obsoleted; users should configure
 
147
    for <code>i[34567]86-*-cygwin*</code> instead.</p>
 
148
 
 
149
    <p>Certain configure options to control the set of libraries built
 
150
    with GCC on some targets have been obsoleted.  On ARM targets, the
 
151
    options <code>--disable-fpu</code>, <code>--disable-26bit</code>,
 
152
    <code>--disable-underscore</code>, <code>--disable-interwork</code>,
 
153
    <code>--disable-biendian</code> and <code>--disable-nofmult</code>
 
154
    have been obsoleted.  On MIPS targets, the options
 
155
    <code>--disable-single-float</code>, <code>--disable-biendian</code>
 
156
    and <code>--disable-softfloat</code> have been obsoleted.</p>
 
157
 
 
158
    </li>
 
159
 
 
160
    <li>Support has been removed for all the 
 
161
    <a href="../gcc-4.5/changes.html#obsoleted">configurations obsoleted
 
162
    in GCC 4.5</a>.</li>
 
163
 
 
164
</ul>
 
165
 
 
166
<h2>General Optimizer Improvements</h2>
 
167
 
 
168
  <ul>
 
169
    <li>A new general optimization level, <code>-Ofast</code>, has been
 
170
      introduced.  It combines the existing optimization level <code>-O3</code>
 
171
      with options that can affect standards compliance but result in
 
172
      better optimized code.  For example, <code>-Ofast</code> enables
 
173
      <code>-ffast-math</code>.</li>
 
174
      <li>Link-time optimization improvements:
 
175
      <ul>
 
176
        <li>The <a href="../projects/lto/whopr.pdf">Scalable Whole
 
177
           Program Optimizer (WHOPR)</a> project has stabilized to the
 
178
           point of being usable.  It has become the default mode when
 
179
           using the LTO optimization model.  Link time optimization can
 
180
           now split itself into multiple parallel compilations. Parallelism
 
181
           is controlled with <code>-flto=<em>n</em></code> (where
 
182
           <em>n</em> specifies the number of compilations to execute in
 
183
           parallel).  GCC can also cooperate with a GNU make job server
 
184
           by specifying the <code>-flto=jobserver</code> option and
 
185
           adding <code>+</code> to the beginning of the
 
186
           Makefile rule executing the linker.<br />
 
187
           Classical LTO mode can be enforced by
 
188
           <code>-flto-partition=none</code>. This may result in small code
 
189
           quality improvements.</li>
 
190
        <li>A large number of bugs were fixed.  GCC itself, Mozilla
 
191
           Firefox and other large applications can be built with
 
192
           LTO enabled.</li>
 
193
        <li>The linker plugin support improvements
 
194
        <ul>
 
195
           <li>Linker plugin is now enabled by default when the linker is
 
196
           detected to have plugin support.  This is the case for GNU
 
197
           ld 2.21.51 or newer (on ELF and Cygwin targets) and the Gold
 
198
           linker on ELF targets.  Plugin support of the Apple linker on
 
199
           Darwin is not compatible with GCC.
 
200
           The linker plugin can also be controlled by the
 
201
           <code>-fuse-linker-plugin</code> command line option.</li>
 
202
           <li>Resolution information from the linker plugin is used to drive
 
203
           whole program assumptions. Use of the linker plugin results in
 
204
           more aggressive optimization on binaries and on shared libraries
 
205
           that use the <code>hidden</code> visibility
 
206
           attribute. Consequently the use
 
207
           of <code>-fwhole-program</code> is not neccesary in addition to
 
208
           LTO.</li>
 
209
        </ul>
 
210
        </li>
 
211
        <li>Hidden symbols used from non-LTO objects now have to be
 
212
           explicitly annotated with <code>externally_visible</code> when
 
213
           the linker plugin is not used.</li>
 
214
        <li>C++ inline functions and virtual tables are now privatized more
 
215
           aggressively, leading to better inter-procedural optimization
 
216
           and faster dynamic linking.</li>
 
217
        <li>Memory usage and intermediate language streaming performance
 
218
           have been improved.</li>
 
219
        <li>Static constructors and destructors from individual units are
 
220
           inlined into a single function.
 
221
           This can significantly improve startup times of large C++
 
222
           applications where static constructors are very common. For
 
223
           example, static constructors are used when including the
 
224
           <code>iostream</code> header.</li>
 
225
        <li>Support for the Ada language has been added.</li>
 
226
      </ul>
 
227
      </li>
 
228
      <li>Interprocedural optimization improvements
 
229
      <ul>
 
230
          <li>The interprocedural framework was re-tuned for link time
 
231
              optimization. Several scalability issues were resolved.</li>
 
232
          <li>Improved auto-detection of <code>const</code> and <code>pure</code>
 
233
              functions.  Newly, <code>noreturn</code> functions are auto-detected.
 
234
              <p>The <a href="http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#Warning-Options"><code>-Wsuggest-attribute=[const|pure|noreturn]</code></a>
 
235
              flag is available that informs users when adding
 
236
              attributes to headers might improve code generation.</p></li>
 
237
          <li>A number of inlining heuristic improvements. In particular:
 
238
              <ul>
 
239
                 <li>Partial inlining is now supported and enabled by default
 
240
                     at <code>-O2</code> and greater.  The feature can be
 
241
                     controlled via <code>-fpartial-inlining</code>.
 
242
                     <p>
 
243
                     Partial inlining splits functions with short hot path
 
244
                     to return.  This allows more aggressive inlining of the
 
245
                     hot path leading to better performance and often to
 
246
                     code size reductions (because cold parts of functions
 
247
                     are not duplicated).
 
248
                     </p>
 
249
                 </li>
 
250
                 <li>Scalability for large compilation units was improved
 
251
                     significantly.</li>
 
252
                 <li>Inlining of callbacks is now more aggressive.</li>
 
253
                 <li>Virtual methods are considered for inlining when the
 
254
                     caller is
 
255
                     inlined and devirtualization is then possible.</li>
 
256
                 <li>Inlining when optimizing for size (either in cold
 
257
                    regions of a program or when compiling with
 
258
                    <code>-Os</code>) was improved to better handle C++
 
259
                    programs with larger abstraction penalty, leading
 
260
                    to smaller and faster code.</li>
 
261
              </ul>
 
262
          </li>
 
263
          <li>The IPA reference optimization pass detecting global
 
264
            variables used or modified by functions was strengthened
 
265
            and sped up.</li>
 
266
          <li>Functions whose address was taken are now optimized out
 
267
            when all references to them are dead.</li>
 
268
          <li>A new inter-procedural static profile estimation pass detects
 
269
            functions that are executed once or unlikely to be executed.
 
270
            Unlikely executed functions are optimized for size.  Functions
 
271
            executed once are optimized for size except for the inner
 
272
            loops.</li>
 
273
          <li>On most targets with named section support, functions used only
 
274
            at startup (static constructors and <code>main</code>), functions
 
275
            used only at exit and functions detected to be cold are placed into
 
276
            separate text segment subsections.
 
277
            This extends the <code>-freorder-functions</code> feature and is
 
278
            controlled by the same switch. The goal is to improve the startup
 
279
            time of large C++ programs.
 
280
            <p>Proper function placement requires linker support.
 
281
            GNU ld 2.21.51 on ELF targets was updated to place
 
282
            those functions together within the text section leading to better code
 
283
            locality and faster startup times of large C++ programs. The feature is
 
284
            also supported in the Apple linker.
 
285
            Support in the gold linker is planned.</p>
 
286
            </li>
 
287
      </ul>
 
288
      </li>
 
289
      <li>A new switch <code>-fstack-usage</code> has been added.  It makes
 
290
      the compiler output stack usage information for the program, on a
 
291
      per-function basis, in an auxiliary file.</li>
 
292
      <li>A new switch <code>-fcombine-stack-adjustments</code> has been added.
 
293
      It can be used to enable or disable the compiler's stack-slot combining
 
294
      pass which before was enabled automatically at <code>-O1</code> and above,
 
295
      but could not be controlled on its own.</li>
 
296
      <li>A new switch <code>-fstrict-volatile-bitfields</code> has been
 
297
        added.  Using it indicates that accesses to volatile bitfields
 
298
        should use a single access of the width of the field's type.
 
299
        This option can be useful for precisely defining and accessing
 
300
        memory-mapped peripheral registers from C or C++.</li>
 
301
  </ul>
 
302
 
 
303
<h2>Compile time and memory usage improvements</h2>
 
304
  <ul>
 
305
      <li>Datastructures used by the dataflow framework in GCC were reorganized
 
306
          for better memory usage and more cache locality.  Compile
 
307
          time is improved especially on units with large functions (possibly
 
308
          resulting from a lot of inlining) not fitting into the processor cache.
 
309
          The compile time of the GCC C compiler binary with link-time
 
310
          optimization went down by over 10% (benchmarked on x86-64 target).</li>
 
311
  </ul>
 
312
 
 
313
<h2>New Languages and Language specific improvements</h2>
 
314
 
 
315
<h3>Ada</h3>
 
316
 
 
317
  <ul>
 
318
    <li>Stack checking has been improved on selected architectures (Alpha,
 
319
    IA-32/x86-64, RS/6000 and SPARC): it now will detect stack overflows
 
320
    in all cases on these architectures.</li>
 
321
    <li>Initial support for Ada 2012 has been added.</li>
 
322
  </ul>
 
323
 
 
324
<h3>C family</h3>
 
325
 
 
326
  <ul>
 
327
    <li>A new warning, enabled by <code>-Wdouble-promotion</code>,
 
328
      has been added that warns about cases where a value of type
 
329
      <code>float</code> is implicitly promoted to <code>double</code>.
 
330
      This is especially helpful for CPUs that handle the former in
 
331
      hardware, but emulate the latter in software.</li>
 
332
    <li>A new function attribute <code>leaf</code> was introduced.
 
333
      This attribute allows better inter-procedural optimization across
 
334
      calls to functions that return to the current unit only via returning
 
335
      or exception handling.  This is the case for most library functions
 
336
      that have no callbacks.</li>
 
337
    <li>Support for a new data type <code>__int128</code> for targets having
 
338
    wide enough machine-mode support.</li>
 
339
    <li>The new function attribute <code>callee_pop_aggregate</code> allows
 
340
    to specify if the caller or callee is responsible for popping the
 
341
    aggregate return pointer value from the stack.</li>
 
342
    <li>Support for selectively enabling and disabling warnings
 
343
      via <code>#pragma GCC diagnostic</code> has been added.  For instance:
 
344
<pre>#pragma GCC diagnostic error "-Wuninitialized"
 
345
  foo(a);                       /* error is given for this one */
 
346
#pragma GCC diagnostic push
 
347
#pragma GCC diagnostic ignored "-Wuninitialized"
 
348
  foo(b);                       /* no diagnostic for this one */
 
349
#pragma GCC diagnostic pop
 
350
  foo(c);                       /* error is given for this one */
 
351
#pragma GCC diagnostic pop
 
352
  foo(d);                       /* depends on command line options */
 
353
</pre></li>
 
354
    <li>The <code>-fmax-errors=N</code> option is now supported.  Using
 
355
    this option causes the compiler to exit after <code>N</code> errors
 
356
    have been issued.</li>
 
357
  </ul>
 
358
 
 
359
<h3 id="c">C</h3>
 
360
 
 
361
  <ul>
 
362
    <li>There is now experimental support for some features from the
 
363
    upcoming C1X revision of the ISO C standard.  This support may be
 
364
    selected with <code>-std=c1x</code>, or <code>-std=gnu1x</code>
 
365
    for C1X with GNU extensions.  Note that this support is
 
366
    experimental and may change incompatibly in future releases for
 
367
    consistency with changes to the C1X standard draft.  The following
 
368
    features are newly supported as described in the N1539 draft of
 
369
    C1X (with changes agreed at the March 2011 WG14 meeting); some
 
370
    other features were already supported with no compiler
 
371
    changes being needed, or have some support but not in full accord
 
372
    with N1539 (as amended).
 
373
    <ul>
 
374
      <li>Static assertions (<code>_Static_assert</code> keyword)</li>
 
375
      <li>Typedef redefinition</li>
 
376
      <li>New macros in <code>&lt;float.h&gt;</code></li>
 
377
      <li>Anonymous structures and unions</li>
 
378
    </ul>
 
379
    </li>
 
380
    <li>The new <code>-fplan9-extensions</code> option directs the
 
381
      compiler to support some extensions for anonymous struct fields
 
382
      which are implemented by the Plan 9 compiler.  A pointer to a
 
383
      struct may be automatically converted to a pointer to an
 
384
      anonymous field when calling a function, in order to make the
 
385
      types match.  An anonymous struct field whose type is a typedef
 
386
      name may be referred to using the typedef name.</li>
 
387
  </ul>
 
388
 
 
389
<h3 id="cplusplus">C++</h3>
 
390
 
 
391
  <ul>
 
392
    <li>Improved <a href="cxx0x_status.html">experimental support for the
 
393
    upcoming C++0x</a> ISO C++ standard, including support for
 
394
    <code>constexpr</code> (thanks to Gabriel Dos Reis and Jason Merrill),
 
395
    <code>nullptr</code> (thanks to Magnus Fromreide), <code>noexcept</code>,
 
396
    unrestricted unions, range-based <code>for</code> loops (thanks to Rodrigo Rivas Costa),
 
397
    opaque enum declarations (thanks also to Rodrigo), implicitly deleted
 
398
    functions and implicit move constructors.</li>
 
399
 
 
400
    <li>When an extern declaration within a function does not match a
 
401
    declaration in the enclosing context, G++ now properly declares the
 
402
    name within the namespace of the function rather than the namespace
 
403
    which was open just before the function definition
 
404
    (<a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43145">c++/43145</a>).</li>
 
405
 
 
406
    <li>GCC now warns by default when casting integers to larger
 
407
    pointer types.  These warnings can be disabled with the option
 
408
    <code>-Wno-int-to-pointer-cast</code>, which is now also available
 
409
    in C++.</li>
 
410
 
 
411
    <li>G++ no longer optimizes using the assumption that a value of
 
412
    enumeration type will fall within the range specified by the standard,
 
413
    since that assumption is easily violated with a conversion from integer
 
414
    type (<a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43680">c++/43680</a>).
 
415
    The old behavior can be restored with <code>-fstrict-enums</code>.</li>
 
416
 
 
417
    <li>The new <code>-fnothrow-opt</code> flag changes the semantics of
 
418
    a <code>throw()</code> exception specification to match the proposed
 
419
    semantics of the <code>noexcept</code> specification: just call
 
420
    <code>terminate</code> if an exception tries to propagate out of a
 
421
    function with such an exception specification.  This dramatically
 
422
    reduces or eliminates the code size overhead from adding the exception
 
423
    specification.</li>
 
424
 
 
425
    <li>The new <code>-Wnoexcept</code> flag will suggest adding
 
426
    a <code>noexcept</code> qualifier to a function that the compiler can
 
427
    tell doesn't throw if it would change the value of
 
428
    a <code>noexcept</code> expression.</li>
 
429
 
 
430
    <li>The <code>-Wshadow</code> option now warns if a local variable or
 
431
    type declaration shadows another type in C++. Note that the compiler will
 
432
    not warn if a local variable shadows a struct/class/enum, but will warn
 
433
    if it shadows an explicit typedef. </li>
 
434
 
 
435
    <li>When an identifier is not found in the current scope, G++ now
 
436
    offers suggestions about which identifier might have been
 
437
    intended.</li>
 
438
 
 
439
    <li>G++ now issues clearer diagnostics for missing semicolons
 
440
    after <code>class</code>, <code>struct</code>,
 
441
    and <code>union</code> definitions.</li>
 
442
 
 
443
    <li>G++ now issues clearer diagnostics for missing semicolons after
 
444
    class member declarations.</li>
 
445
 
 
446
    <li>G++ now issues clearer diagnostics when a colon is used in a
 
447
    place where a double-colon was intended.</li>
 
448
 
 
449
    <li>G++ no longer accepts <code>mutable</code> on reference members
 
450
    (<a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33558">c++/33558</a>).
 
451
    Use <code>-fpermissive</code> to allow the old, non-conforming behaviour.
 
452
    </li>
 
453
 
 
454
    <li>A few mangling fixes have been made, to attribute const/volatile on
 
455
      function pointer types, decltype of a plain decl, and use of a
 
456
      function parameter in the declaration of another parameter.  By
 
457
      default the compiler still uses the old mangling, but emits aliases
 
458
      with the new mangling on targets that support strong aliases.  Users
 
459
      can switch over entirely to the new mangling
 
460
      with <code>-fabi-version=5</code> or <code>-fabi-version=0</code>.
 
461
      <code>-Wabi</code> will now warn about code that uses the old
 
462
      mangling.</li>
 
463
 
 
464
    <li>G++ no longer allows objects of const-qualified type to be default
 
465
    initialized unless the type has a user-declared default constructor.
 
466
    Code that fails to compile can be fixed by providing an initializer e.g.
 
467
    <pre>
 
468
    struct A { A(); };
 
469
    struct B : A { };
 
470
    const B b = B();
 
471
    </pre>
 
472
    Use <code>-fpermissive</code> to allow the old, non-conforming behaviour.
 
473
    </li>
 
474
 
 
475
  </ul>
 
476
 
 
477
  <h4>Runtime Library (libstdc++)</h4>
 
478
 
 
479
  <ul>
 
480
    <li><a href="http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.200x">
 
481
       Improved experimental support for the upcoming ISO C++ standard, 
 
482
       C++0x</a>, including using <code>constexpr</code> and
 
483
       <code>nullptr</code>. </li>
 
484
    <li>Performance improvements to the
 
485
      <a href="http://gcc.gnu.org/onlinedocs/libstdc++/manual/debug_mode.html">Debug
 
486
      Mode</a>, thanks to Fran&ccedil;ois Dumont.
 
487
    </li>
 
488
    <li>Atomic operations used for reference-counting are annotated so that
 
489
      they can be understood by race detectors such as Helgrind, see
 
490
      <a href="http://gcc.gnu.org/onlinedocs/libstdc++/manual/debug.html#debug.races">Data
 
491
      Race Hunting</a>.</li>
 
492
    <li>Most libstdc++ standard headers have been changed to no longer include
 
493
      the <code>cstddef</code> header as an implementation detail.  Code that
 
494
      relied on that header being included as side-effect of including other
 
495
      standard headers will need to include <code>cstddef</code> explicitly.</li>
 
496
  </ul>
 
497
 
 
498
<h3 id="fortran">Fortran</h3>
 
499
  <ul>
 
500
    <li>On systems supporting the <code>libquadmath</code> library, GNU Fortran
 
501
    now also supports a quad-precision, <code>kind=16</code> floating-point
 
502
    data type (<code>REAL(16)</code>, <code>COMPLEX(16)</code>). As the data
 
503
    type is not fully supported in hardware, calculations might be one to
 
504
    two orders of magnitude slower than with the 4, 8 or 10 bytes
 
505
    floating-point data types. This change does not affect systems which
 
506
    support <code>REAL(16)</code> in hardware nor those which do not support
 
507
    <code>libquadmath</code>.</li>
 
508
    <li>Much improved compile time for large array constructors.</li>
 
509
    <li>In order to reduce execution time and memory consumption, use of
 
510
      temporary arrays in assignment expressions is avoided for
 
511
      many cases.  The compiler now reverses loops in order to avoid
 
512
      generating a temporary array where possible.</li>
 
513
    <li>Improved diagnostics, especially with
 
514
      <code>-fwhole-file</code>.</li>
 
515
    <li>The <code>-fwhole-file</code> flag is now enabled by default. This
 
516
    improves code generation and diagnostics. It can be
 
517
    disabled using the deprecated <code>-fno-whole-file</code> flag.</li>
 
518
    <li>Support the generation of Makefile dependencies via the <a
 
519
    href="http://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html">
 
520
    <code>-M</code>...</a> flags of GCC; you may need to specify the
 
521
    <code>-cpp</code> option in addition. The dependencies take
 
522
    modules, Fortran's <code>include</code>, and CPP's <code>#include</code>
 
523
    into account. Note: Using <code>-M</code> for the module path is no
 
524
    longer supported, use <code>-J</code> instead.</li>
 
525
    <li>The flag <code>-Wconversion</code> has been modified to only issue
 
526
    warnings where a conversion leads to information loss.  This drastically
 
527
    reduces the number of warnings; <code>-Wconversion</code> is thus now
 
528
    enabled with <code>-Wall</code>. The flag <code>-Wconversion-extra</code>
 
529
    has been added and also warns about other conversions;
 
530
    <code>-Wconversion-extra</code> typically issues a huge number of
 
531
    warnings, most of which can be ignored.</li>
 
532
    <li>A new command-line option <code>-Wunused-dummy-argument</code> warns
 
533
        about unused dummy arguments and is included in <code>-Wall</code>.
 
534
        Before, <code>-Wunused-variable</code> also warned about unused dummy
 
535
        arguments.</li>
 
536
    <li>Fortran 2003 support has been extended:
 
537
      <ul>
 
538
        <li>Improved support for polymorphism between libraries and
 
539
        programs and for complicated inheritance patterns (cf. <a
 
540
        href="http://gcc.gnu.org/wiki/OOP">object-oriented programming</a>).
 
541
        </li>
 
542
        <li>Experimental support of the <code>ASSOCIATE</code> construct.</li>
 
543
        <li>In pointer assignments it is now possible to specify the lower
 
544
        bounds of the pointer and, for a rank-1 or a simply contiguous
 
545
        data-target, to remap the bounds.</li>
 
546
        <li>Automatic (re)allocation: In intrinsic assignments to
 
547
        allocatable variables the left-hand side will be automatically
 
548
        allocated (if unallocated) or reallocated (if the shape or type
 
549
        parameter is different). To avoid the small performance penalty,
 
550
        you can use <code>a(:) = ...</code> instead of <code>a = ...</code>
 
551
        for arrays and character strings &ndash; or disable the feature using
 
552
        <code>-std=f95</code> or <code>-fno-realloc-lhs</code>.</li>
 
553
        <li>Deferred type parameter: For scalar allocatable and pointer
 
554
        variables the character length can be deferred.</li>
 
555
        <li>Namelist variables with allocatable and pointer attribute and
 
556
        nonconstant length type parameter are supported.</li>
 
557
      </ul>
 
558
    </li>
 
559
    <li>Fortran 2008 support has been extended:
 
560
      <ul>
 
561
        <li>Experimental <a href="http://gcc.gnu.org/wiki/Coarray">
 
562
        coarray support</a> (for one image only, i.e. <code>num_images() ==
 
563
        1</code>); use the <a
 
564
        href="http://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfcoarray_007d-233">
 
565
        <code>-fcoarray=single</code></a> flag to enable it.</li>
 
566
        <li>The <code>STOP</code> and the new <code>ERROR STOP</code>
 
567
        statements now support all constant expressions.</li>
 
568
        <li>Support for the <code>CONTIGUOUS</code> attribute.</li>
 
569
        <li>Support for <code>ALLOCATE</code> with <code>MOLD</code>.</li>
 
570
        <li>Support for the <code>STORAGE_SIZE</code> intrinsic inquiry
 
571
        function.</li>
 
572
        <li>Support of the <code>NORM2</code> and <code>PARITY</code>
 
573
        intrinsic functions.</li>
 
574
        <li>The following bit intrinsics were added: <code>POPCNT</code>
 
575
        and <code>POPPAR</code> for counting the number of 1 bits and
 
576
        returning the parity; <code>BGE</code>, <code>BGT</code>,
 
577
        <code>BLE</code>, and <code>BLT</code> for bitwise comparisons;
 
578
        <code>DSHIFTL</code> and <code>DSHIFTR</code> for combined left
 
579
        and right shifts, <code>MASKL</code> and <code>MASKR</code> for
 
580
        simple left and right justified masks, <code>MERGE_BITS</code>
 
581
        for a bitwise merge using a mask, <code>SHIFTA</code>,
 
582
        <code>SHIFTL</code> and <code>SHIFTR</code> for shift operations,
 
583
        and the transformational bit intrinsics <code>IALL</code>,
 
584
        <code>IANY</code> and <code>IPARITY</code>.</li>
 
585
        <li>Support of the <code>EXECUTE_COMMAND_LINE</code> intrinsic
 
586
        subroutine.</li>
 
587
        <li>Support for the <code>IMPURE</code> attribute for procedures,
 
588
        which allows for <code>ELEMENTAL</code> procedures without the
 
589
        restrictions of <code>PURE</code>.</li>
 
590
        <li>Null pointers (including <code>NULL()</code>) and not
 
591
        allocated variables can be used as actual argument to optional
 
592
        non-pointer, non-allocatable dummy arguments, denoting an absent
 
593
        argument.</li>
 
594
        <li>Non-pointer variables with <code>TARGET</code> attribute can
 
595
        be used as actual argument to <code>POINTER</code> dummies with
 
596
        <code>INTENT(IN)</code></li>
 
597
        <li>Pointers including procedure pointers and those in a derived
 
598
        type (pointer components) can now be initialized by a target
 
599
        instead of only by <code>NULL</code>.</li>
 
600
        <li>The <code>EXIT</code> statement (with construct-name) can
 
601
        now be used to leave not only the <code>DO</code> but also the
 
602
        <code>ASSOCIATE</code>, <code>BLOCK</code>, <code>IF</code>,
 
603
        <code>SELECT CASE</code> and <code>SELECT TYPE</code> constructs.</li>
 
604
        <li>Internal procedures can now be used as actual argument.</li>
 
605
        <li>The named constants <code>INTEGER_KINDS</code>,
 
606
        <code>LOGICAL_KINDS</code>, <code>REAL_KINDS</code> and
 
607
        <code>CHARACTER_KINDS</code> of the intrinsic module
 
608
        <code>ISO_FORTRAN_ENV</code> have been added; these arrays contain
 
609
        the supported kind values for the respective types.</li>
 
610
        <li>The module procedures <code>C_SIZEOF</code> of the intrinsic
 
611
        module <code>ISO_C_BINDINGS</code> and <code>COMPILER_VERSION</code>
 
612
        and <code>COMPILER_OPTIONS</code> of <code>ISO_FORTRAN_ENV</code>
 
613
        have been implemented.</li>
 
614
        <li>Minor changes: obsolescence diagnostics for <code>ENTRY</code>
 
615
        was added for <code>-std=f2008</code>;
 
616
        a line may start with a semicolon;
 
617
        for internal and module procedures <code>END</code> can be used
 
618
        instead of <code>END SUBROUTINE</code> and <code>END
 
619
        FUNCTION</code>; <code>SELECTED_REAL_KIND</code> now also takes a
 
620
        <code>RADIX</code> argument; intrinsic types are supported for
 
621
        <code>TYPE(<i>intrinsic-type-spec</i>)</code>; multiple type-bound
 
622
        procedures can be declared in a single <code>PROCEDURE</code>
 
623
        statement; implied-shape arrays are supported for named constants
 
624
        (<code>PARAMETER</code>). The transformational, three argument
 
625
        versions of <code>BESSEL_JN</code> and <code>BESSEL_YN</code>
 
626
        were added &ndash; the elemental, two-argument version had been
 
627
        added in GCC 4.4; note that the transformational functions use
 
628
        a recurrence algorithm.</li>
 
629
      </ul>
 
630
    </li>
 
631
  </ul>
 
632
 
 
633
<h3 id="go">Go</h3>
 
634
 
 
635
<p>Support for the <a href="http://golang.org/">Go programming
 
636
    language</a> has been added to GCC.  It is not enabled by default
 
637
    when you build GCC; use the <code>--enable-languages</code>
 
638
    configure option to build it.  The driver program for compiling Go
 
639
    code is <code>gccgo</code>.</p>
 
640
 
 
641
<p>Go is currently known to work on GNU/Linux and RTEMS.  Solaris
 
642
  support is in progress.  It may or may not work on other
 
643
  platforms.</p>
 
644
 
 
645
<h3>Java (GCJ)</h3>
 
646
 
 
647
<h3 id="objective-c">Objective-C and Objective-C++</h3>
 
648
 
 
649
  <ul>
 
650
    <li>The <code>-fobjc-exceptions</code> flag is now required to
 
651
    enable Objective-C exception and synchronization syntax
 
652
    (introduced by the keywords <code>@try</code>,
 
653
    <code>@catch</code>, <code>@finally</code> and
 
654
    <code>@synchronized</code>).</li>
 
655
 
 
656
    <li>A number of Objective-C 2.0 features and extensions are now
 
657
    supported by GCC.  These features are enabled by default; you can
 
658
    disable them by using the new <code>-fobjc-std=objc1</code>
 
659
    command-line option.</li>
 
660
 
 
661
    <li>The Objective-C 2.0 dot-syntax is now supported.  It is an
 
662
    alternative syntax for using getters and setters;
 
663
    <code>object.count</code> is automatically converted into
 
664
    <code>[object count]</code> or <code>[object setCount: ...]</code>
 
665
    depending on context; for example <code>if (object.count >
 
666
    0)</code> is automatically compiled into the equivalent of
 
667
    <code>if ([object count] > 0)</code> while <code>object.count =
 
668
    0;</code> is automatically compiled into the equivalent ot
 
669
    <code>[object setCount: 0];</code>.  The dot-syntax can be used
 
670
    with instance and class objects and with any setters or getters,
 
671
    no matter if they are part of a declared property or not.</li>
 
672
 
 
673
    <li>Objective-C 2.0 declared properties are now supported.  They
 
674
    are declared using the new <code>@property</code> keyword, and are
 
675
    most commonly used in conjunction with the new Objective-C 2.0
 
676
    dot-syntax.  The <code>nonatomic</code>, <code>readonly</code>,
 
677
    <code>readwrite</code>, <code>assign</code>, <code>retain</code>,
 
678
    <code>copy</code>, <code>setter</code> and <code>getter</code>
 
679
    attributes are all supported.  Marking declared properties with
 
680
    <code>__attribute__ ((deprecated))</code> is supported too.</li>
 
681
 
 
682
    <li>The Objective-C 2.0 <code>@synthesize</code> and
 
683
    <code>@dynamic</code> keywords are supported.
 
684
    <code>@synthesize</code> causes the compiler to automatically
 
685
    synthesize a declared property, while <code>@dynamic</code> is
 
686
    used to disable all warnings for a declared property for which no
 
687
    implementation is provided at compile time.  Synthesizing declared
 
688
    properties requires runtime support in most useful cases; to be
 
689
    able to use it with the GNU runtime, appropriate helper functions
 
690
    have been added to the GNU Objective-C runtime ABI, and are
 
691
    implemented by the GNU Objective-C runtime library shipped with
 
692
    GCC.</li>
 
693
 
 
694
    <li>The Objective-C 2.0 fast enumeration syntax is supported in
 
695
    Objective-C.  This is currently not yet available in
 
696
    Objective-C++.  Fast enumeration requires support in the runtime,
 
697
    and such support has been added to the GNU Objective-C runtime
 
698
    library (shipped with GCC).</li>
 
699
 
 
700
    <li>The Objective-C 2.0 <code>@optional</code> keyword is
 
701
    supported.  It allows you to mark methods or properties in a
 
702
    protocol as optional as opposed to required.</li>
 
703
 
 
704
    <li>The Objective-C 2.0 <code>@package</code> keyword is
 
705
    supported.  It has currently the same effect as the
 
706
    <code>@public</code> keyword.</li>
 
707
 
 
708
    <li>Objective-C 2.0 method attributes are supported.  Currently
 
709
    the supported attributes are <code>deprecated</code>,
 
710
    <code>sentinel</code>, <code>noreturn</code> and
 
711
    <code>format</code>.</li>
 
712
 
 
713
    <li>Objective-C 2.0 method argument attributes are supported.  The
 
714
    most widely used attribute is <code>unused</code>, to mark an
 
715
    argument as unused in the implementation.</li>
 
716
 
 
717
    <li>Objective-C 2.0 class and protocol attributes are supported.
 
718
    Currently the only supported attribute is
 
719
    <code>deprecated</code>.</li>
 
720
 
 
721
    <li>Objective-C 2.0 class extensions are supported.  A class
 
722
    extension has the same syntax as a category declaration with no
 
723
    category name, and the methods and properties declared in it are
 
724
    added directly to the main class.  It is mostly used as an
 
725
    alternative to a category to add methods to a class without
 
726
    advertising them in the public headers, with the advantage that
 
727
    for class extensions the compiler checks that all the privately
 
728
    declared methods are actually implemented.</li>
 
729
 
 
730
    <li>As a result of these enhancements, GCC can now be used to
 
731
    build Objective-C and Objective-C++ software that uses Foundation
 
732
    and other important system frameworks with the NeXT runtime on
 
733
    Darwin 9 and Darwin 10 (Mac OS X 10.5 and 10.6).  Currently this is for
 
734
    m32 code only.</li>
 
735
 
 
736
    <li>Many bugs in the compiler have been fixed in this release; in
 
737
    particular, LTO can now be used when compiling Objective-C and
 
738
    Objective-C++ and the parser is much more robust in dealing with
 
739
    invalid code.</li>
 
740
  </ul>
 
741
 
 
742
  <h4>Runtime Library (libobjc)</h4>
 
743
 
 
744
  <ul>
 
745
    <li>The GNU Objective-C runtime library now defines the macro
 
746
    <code>__GNU_LIBOBJC__</code> (with a value that is increased at
 
747
    every release where there is any change to the API) in
 
748
    <code>objc/objc.h</code>, making it easy to determine if the GNU
 
749
    Objective-C runtime library is being used, and if so, which
 
750
    version.  Previous versions of the GNU Objective-C runtime library
 
751
    (and other Objective-C runtime libraries such as the Apple one) do
 
752
    not define this macro.</li>
 
753
 
 
754
    <li>A new Objective-C 2.0 API, almost identical to the one
 
755
    implemented by the Apple Objective-C runtime, has been implemented
 
756
    in the GNU Objective-C runtime library.  The new API hides the
 
757
    internals of most runtime structures but provides a more extensive
 
758
    set of functions to operate on them.  It is much easier, for
 
759
    example, to create or modify classes at runtime.  The new API also
 
760
    makes it easier to port software from Apple to GNU as almost no
 
761
    changes should be required.  The old API is still supported for
 
762
    backwards compatibility; including the old
 
763
    <code>objc/objc-api.h</code> header file automatically selects the
 
764
    old API, while including the new <code>objc/runtime.h</code>
 
765
    header file automatically selects the new API.  Support for the
 
766
    old API is being phased out and upgrading the software to use the
 
767
    new API is strongly recommended.  To check for the availability of
 
768
    the new API, the <code>__GNU_LIBOBJC__</code> macro can be used as
 
769
    older versions of the GNU Objective-C runtime library, which do
 
770
    not support the new API, do not define such a macro.</li>
 
771
 
 
772
    <li>Runtime support for <code>@synchronized</code> has been added.</li>
 
773
 
 
774
    <li>Runtime support for Objective-C 2.0 synthesized property
 
775
    accessors has been added.</li>
 
776
 
 
777
    <li>Runtime support for Objective-C 2.0 fast enumeration has been
 
778
    added.</li>
 
779
  </ul>
 
780
 
 
781
<h2 id="targets">New Targets and Target Specific Improvements</h2>
 
782
 
 
783
<h3 id="arm">ARM</h3>
 
784
    <ul>
 
785
    <li>GCC now supports the Cortex-M4 processor implementing
 
786
      the v7-em version of the architecture using the option
 
787
      <code>-mcpu=cortex-m4</code>.</li>
 
788
 
 
789
    <li>Scheduling descriptions for the Cortex-M4, the Neon and
 
790
      the floating point units of the Cortex-A9 and a pipeline 
 
791
      description for the Cortex-A5 have been added.</li>
 
792
 
 
793
    <li>Synchronization primitives such as <code>__sync_fetch_and_add
 
794
      </code> and friends are now inlined for supported architectures
 
795
      rather than calling into a kernel helper function.</li>
 
796
 
 
797
    <li>SSA loop prefetching is enabled by default for the
 
798
      Cortex-A9 at <code>-O3</code>.</li>
 
799
 
 
800
    <li>Several improvements were committed to improve code
 
801
      generation for the ARM architecture including a rewritten
 
802
      implementation for load and store multiples.</li>
 
803
 
 
804
    <li>Several enhancements were committed to improve SIMD code
 
805
      generation for NEON by adding support for widening instructions,
 
806
      misaligned loads and stores, vector conditionals and
 
807
      support for 64 bit arithmetic.</li>
 
808
 
 
809
    <li>Support was added for the Faraday cores fa526, fa606te,
 
810
      fa626te, fmp626te, fmp626 and fa726te and can be used with the
 
811
      respective names as parameters to the <code>-mcpu=</code>
 
812
      option.</li>
 
813
 
 
814
    <li>Basic support was added for Cortex-A15 and is available through
 
815
      <code>-mcpu=cortex-a15</code>.</li>
 
816
 
 
817
    <li>GCC for AAPCS configurations now more closely adheres to the AAPCS
 
818
      specification by enabling <code>-fstrict-volatile-bitfields</code> by
 
819
      default.</li>
 
820
  </ul>
 
821
 
 
822
<h3>IA-32/x86-64</h3>
 
823
  <ul>
 
824
    <li>
 
825
      The new <code>-fsplit-stack</code> option permits programs to
 
826
      use a discontiguous stack.  This is useful for threaded
 
827
      programs, in that it is no longer necessary to specify the
 
828
      maximum stack size when creating a thread.  This feature is
 
829
      currently only implemented for 32-bit and 64-bit x86 GNU/Linux
 
830
      targets.
 
831
    </li>
 
832
        <li>Support for emitting profiler counter calls before function
 
833
        prologues.  This is enabled via a new command-line option
 
834
        <code>-mfentry</code>.</li>
 
835
    <li>Optimization for the Intel Core 2 processors is now available through
 
836
        the <code>-march=core2</code> and <code>-mtune=core2</code>
 
837
        options.</li>
 
838
    <li>Support for Intel Core i3/i5/i7 processors is now available through
 
839
        the <code>-march=corei7</code> and <code>-mtune=corei7</code>
 
840
        options.</li>
 
841
    <li>Support for Intel Core i3/i5/i7 processors with AVX is now
 
842
        available through the <code>-march=corei7-avx</code> and
 
843
        <code>-mtune=corei7-avx</code> options.</li>
 
844
    <li>Support for AMD Bobcat (family 14) processors is now available through
 
845
        the <code>-march=btver1</code> and <code>-mtune=btver1</code>
 
846
        options.</li>
 
847
    <li>The default setting (when not optimizing for size) for 32-bit
 
848
      GNU/Linux and Darwin x86 targets has been changed to
 
849
      <code>-fomit-frame-pointer</code>.  The default can be reverted
 
850
      to <code>-fno-omit-frame-pointer</code> by configuring GCC with
 
851
      the <code>--enable-frame-pointer</code> configure option.</li>
 
852
    <li>Darwin, FreeBSD, Solaris 2, MinGW and Cygwin now all support
 
853
      <code>__float128</code> on 32-bit and 64-bit x86 targets.</li>
 
854
    <li>AVX floating-point arithmetic can now be enabled by default at
 
855
      configure time with the new <code>--with-fpmath=avx</code> option.</li>
 
856
    <li>The SSA loop prefetching pass is enabled when
 
857
      using <code>-O3</code> when optimizing for CPUs where prefetching
 
858
      is beneficial (AMD CPUs newer than K6).</li>
 
859
    <li>Support for TBM (Trailing Bit Manipulation) built-in functions
 
860
      and code generation is available via <code>-mtbm</code>.</li>
 
861
    <li>Support for AMD's BMI (Bit Manipulation) built-in functions and
 
862
      code generation is available via <code>-mbmi</code>.</li>
 
863
  </ul>
 
864
 
 
865
<h3 id="microblaze">MicroBlaze</h3>
 
866
 
 
867
  <ul>
 
868
    <li>Support has been added for the Xilinx MicroBlaze softcore processor
 
869
     (microblaze-elf) embedded target.  This configurable processor is
 
870
     supported on several Xilinx Spartan and Virtex FPGAs.
 
871
    </li>
 
872
  </ul>
 
873
 
 
874
<h3>MIPS</h3>
 
875
  <ul>
 
876
    <li>GCC now supports the Loongson 3A processor.  Its canonical
 
877
        <code>-march=</code> and <code>-mtune=</code> name is
 
878
        <code>loongson3a</code>.
 
879
    </li>
 
880
  </ul>
 
881
 
 
882
<h3 id="mn10300">MN10300 / AM33</h3>
 
883
  <ul>
 
884
    <li>The inline assembly register constraint <code>"A"</code> has
 
885
        been renamed <code>"c"</code>.  This constraint is used to
 
886
        select a floating-point register that can be used as the
 
887
        destination of a multiply-accumulate instruction.
 
888
    </li>
 
889
    <li>New inline assembly register constraints <code>"A"</code> and
 
890
        <code>"D"</code> have been added.  These constraint letters
 
891
        resolve to all general registers when compiling for AM33, and
 
892
        resolve to address registers only or data registers only when
 
893
        compiling for MN10300.
 
894
    </li>
 
895
    <li>The <code>MDR</code> register is represented in the compiler.
 
896
        One can access the register via the <code>"z"</code> constraint
 
897
        in inline assembly.  It can be marked as clobbered or used as
 
898
        a local register variable via the <code>"mdr"</code> name.
 
899
        The compiler uses the <code>RETF</code> instruction if the
 
900
        function does not modify the <code>MDR</code> register, so it
 
901
        is important that inline assembly properly annotate any usage
 
902
        of the register.
 
903
    </li>
 
904
  </ul>
 
905
 
 
906
<h3>PowerPC/PowerPC64</h3>
 
907
  <ul>
 
908
    <li>GCC now supports the Applied Micro Titan processor
 
909
    with <code>-mcpu=titan</code>.</li>
 
910
    <li>The <code>-mrecip</code> option has been added, which indicates
 
911
    whether the reciprocal and reciprocal square root instructions
 
912
    should be used.</li>
 
913
    <li>The <code>-mveclibabi=mass</code> option can be used to enable
 
914
    the compiler to autovectorize mathematical functions using the
 
915
    Mathematical Acceleration Subsystem library.</li>
 
916
    <li>The <code>-msingle-pic-base</code> option has been added, which
 
917
    instructs the compiler to avoid loading the PIC base register in
 
918
    function prologues.  The PIC base register must be initialized by
 
919
    the runtime system.</li>
 
920
    <li>The <code>-mblock-move-inline-limit</code> option has been
 
921
    added, which enables the user to control the maximum size of
 
922
    inlined <code>memcpy</code> calls and similar.</li>
 
923
    <li>PowerPC64 GNU/Linux support for applications requiring a large
 
924
      TOC section has been improved.  A new command-line option,
 
925
      <code>-mcmodel=MODEL</code>, controls this feature; valid values
 
926
      for <code>MODEL</code>
 
927
      are <code>small</code>, <code>medium</code>,
 
928
      or <code>large</code>.</li>
 
929
    <li>The altivec builtin functions <code>vec_ld</code> and <code>vec_st</code>
 
930
      have been modified to generate the Altivec memory instructions
 
931
      <code>LVX</code> and <code>STVX</code>, even if the <code>-mvsx</code>
 
932
      option is used.  In the initial GCC 4.5 release, these builtin functions
 
933
      were changed to generate VSX memory reference instructions instead of
 
934
      Altivec memory instructions, but there are differences between the two
 
935
      instructions.  If the VSX instruction set is available, you can now use
 
936
      the new builtin functions <code>vec_vsx_ld</code> and <code>vec_vsx_st</code>
 
937
      which always generates the VSX memory instructions.</li>
 
938
    <li>The GCC compiler on AIX now defaults to a process layout with a
 
939
      larger data space allowing larger programs to be compiled.</li>
 
940
    <li>The GCC long double type on AIX 6.1 and above has reverted to 64 bit
 
941
      double precision, matching the AIX XL compiler default, because of
 
942
      missing C99 symbols required by the GCC runtime.</li>
 
943
    <li>The default processor scheduling model and tuning for PowerPC64
 
944
      GNU/Linux and for AIX 6.1 and above now is POWER7.</li>
 
945
  </ul>
 
946
 
 
947
<h3>S/390, zSeries and System z9/z10, IBM zEnterprise z196</h3>
 
948
  <ul>
 
949
    <li>Support for the zEnterprise z196 processor has been added.
 
950
      When using the <code>-march=z196</code> option, the compiler
 
951
      will generate code making use of the following instruction
 
952
      facilities:
 
953
      <ul>
 
954
        <li>Conditional load/store</li>
 
955
        <li>Distinct-operands</li>
 
956
        <li>Floating-point-extension</li>
 
957
        <li>Interlocked-access</li>
 
958
        <li>Population-count</li>
 
959
      </ul>
 
960
      The <code>-mtune=z196</code> option avoids the compare and
 
961
      branch instructions as well as the load address instruction
 
962
      with an index register as much as possible and performs
 
963
      instruction scheduling appropriate for the new out-of-order
 
964
      pipeline architecture.</li>
 
965
    <li>When using the <code>-m31 -mzarch</code> options the generated
 
966
      code still conforms to the 32-bit ABI but uses the general
 
967
      purpose registers as 64-bit registers internally.  This
 
968
      requires a Linux kernel saving the whole 64-bit registers when
 
969
      doing a context switch.  Kernels providing that feature
 
970
      indicate that by the 'highgprs' string
 
971
      in <code>/proc/cpuinfo</code>.</li>
 
972
    <li>The SSA loop prefetching pass is enabled when
 
973
      using <code>-O3</code>.</li>
 
974
  </ul>
 
975
 
 
976
<h3>SPARC</h3>
 
977
  <ul>
 
978
    <li>GCC now supports the LEON series of SPARC V8 processors.  The
 
979
     code generated by the compiler can either be tuned to it by means
 
980
     of the <code>--with-tune=leon</code> configure option and
 
981
     <code>-mtune=leon</code> compilation option, or the compiler can
 
982
     be built for the <code>sparc-leon-{elf,linux}</code> and
 
983
     <code>sparc-leon3-{elf,linux}</code> targets directly.</li>
 
984
    <li>GCC has stopped sign/zero-extending parameter registers in the
 
985
     callee for functions taking parameters with sub-word size in 32-bit
 
986
     mode, since this is redundant with the specification of the ABI.
 
987
     GCC has never done so in 64-bit mode since this is also redundant.</li>
 
988
  </ul>
 
989
 
 
990
<h2 id="os">Operating Systems</h2>
 
991
 
 
992
<h3 id="android">Android</h3>
 
993
  <ul>
 
994
    <li>GCC now supports the Bionic C library and provides a convenient
 
995
      way of building native libraries and applications for the Android
 
996
      platform.
 
997
      Refer to the documentation of the <code>-mandroid</code> and
 
998
      <code>-mbionic</code> options for details on building native code.
 
999
      At the moment, Android support is enabled only for ARM.</li>
 
1000
  </ul>
 
1001
 
 
1002
<h3 id="darwin">Darwin/Mac OS X</h3>
 
1003
  <ul>
 
1004
      <li>General 
 
1005
       <ul>
 
1006
        <li>Initial support for <code>CFString</code> types has been
 
1007
        added.<br /> This allows GCC to build projects including the system
 
1008
        <em>Core Foundation</em> frameworks. The GCC Objective-C family
 
1009
        supports <code>CFString</code> "toll-free bridged" as per the Mac 
 
1010
        OS X system tools. <code>CFString</code> is also recognized in the
 
1011
        context of <code>format</code> attributes and arguments (see the
 
1012
        documentation for <code>format</code> attributes for limitations).
 
1013
        At present, 8-bit character types are supported.</li>
 
1014
        <li>LTO-support.<br />Darwin has benefited from ongoing work on
 
1015
        LTO; support for this is now stable and enabled by default.</li>
 
1016
        <li>Object file size reduction.<br /> The Darwin zeroed memory
 
1017
        allocators have been re-written to make more use of
 
1018
        <code>.zerofill</code> sections.  For non-debug code, this can
 
1019
        reduce object file size significantly.</li>
 
1020
       </ul></li>
 
1021
      <li>x86 Architecture 
 
1022
       <ul>
 
1023
        <li>The <code>-mdynamic-no-pic</code> option has been 
 
1024
        enabled.<br />Code supporting <code>-mdynamic-no-pic</code>
 
1025
        optimization has been added and is applicable to <code>-m32</code>
 
1026
        builds. The compiler bootstrap uses the option where 
 
1027
        appropriate.</li>
 
1028
        <li>The default value for <code>-mtune=</code> has been 
 
1029
        changed.<br />Since Darwin systems are primarily Xeon, Core-2 or
 
1030
        similar the default tuning has been changed to 
 
1031
        <code>-mtune=core2</code>.</li>
 
1032
      </ul></li>
 
1033
    <li>PPC Architecture
 
1034
      <ul>
 
1035
       <li>Darwin64 ABI.<br />Several significant bugs have been fixed,
 
1036
        such that GCC now produces code compatible with the Darwin64
 
1037
        PowerPC ABI.</li>
 
1038
        <li>libffi and boehm-gc.<br />The Darwin ports of the libffi and
 
1039
        boehm-gc libraries have been upgraded to include a Darwin64
 
1040
        implementation. This means that powerpc*-*-darwin9 platforms may
 
1041
        now, for example, build Java applications with <code>-m64</code>
 
1042
        enabled.</li>
 
1043
        <li>Plug-in support has been enabled.</li>
 
1044
        <li>The <code>-fsection-anchors</code> option is now available
 
1045
        although, presently, not heavily tested.</li>
 
1046
      </ul></li>
 
1047
  </ul>
 
1048
 
 
1049
<h3 id="solaris">Solaris 2</h3>
 
1050
    <h4>New Features</h4>
 
1051
    <ul>
 
1052
      <li>Support symbol versioning with the Sun linker.</li>
 
1053
      <li>Allow libstdc++ to leverage full ISO C99 support on
 
1054
        Solaris 10+.</li>
 
1055
      <li>Support thread-local storage (TLS) with the Sun assembler on
 
1056
        Solaris 2/x86.</li>
 
1057
      <li>Support TLS on Solaris 8/9 if prerequisites are met.</li>
 
1058
      <li>Support COMDAT group with the GNU assembler and recent Sun
 
1059
        linker.</li>
 
1060
      <li>Support the Sun assembler visibility syntax.</li>
 
1061
      <li>Default Solaris 2/x86 to <code>-march=pentium4</code> (Solaris
 
1062
        10+) resp. <code>-march=pentiumpro</code> (Solaris 8/9).</li>
 
1063
      <li>Don't use SSE on Solaris 8/9 x86 by default.</li>
 
1064
      <li>Enable 128-bit long double (<code>__float128</code>) support on
 
1065
        Solaris 2/x86.</li>
 
1066
      </ul>
 
1067
    <h4>ABI Change</h4>
 
1068
    <ul>
 
1069
      <li>Change the ABI for returning 8-byte vectors like
 
1070
        <code>__m64</code> in MMX registers on Solaris 10+/x86 to match the
 
1071
        Sun Studio 12.1+ compilers.  <em>This is an incompatible change.
 
1072
        If you use such types, you must either recompile all your code with
 
1073
        the new compiler or use the new <code>-mvect8-ret-in-mem</code>
 
1074
        option to remain compatible with previous versions of GCC and
 
1075
        Sun Studio.</em></li>
 
1076
    </ul>
 
1077
 
 
1078
<h3 id="windows">Windows x86/x86_64</h3>
 
1079
  <ul>
 
1080
    <li>Initial support for decimal floating point.</li>
 
1081
    <li>Support for the <code>__thiscall</code> calling-convention.</li>
 
1082
    <li>Support for hot-patchable function prologues via the
 
1083
    <code>ms_hook_prologue</code> attribute for x86_64 in addition to 32-bit x86.</li>
 
1084
    <li>Improvements of stack-probing and stack-allocation mechanisms.</li>
 
1085
    <li>Support of push/pop-macro pragma as preprocessor command.<br />
 
1086
    With <code>#pragma push_macro(&quot;macro-name&quot;)</code> the
 
1087
    current definition of <code>macro-name</code> is saved and can be
 
1088
    restored with <code>#pragma pop_macro(&quot;macro-name&quot;)</code>
 
1089
    to its saved definition.</li>
 
1090
    <li>Enable 128-bit long double (<code>__float128</code>) support on
 
1091
      MinGW and Cygwin.</li>
 
1092
  </ul>
 
1093
 
 
1094
<h2>Documentation improvements</h2>
 
1095
 
 
1096
<h2>Other significant improvements</h2>
 
1097
 
 
1098
<h3>Installation changes</h3>
 
1099
 
 
1100
  <ul>
 
1101
    <li>
 
1102
    An <code>install-strip</code> <code>make</code> target is provided
 
1103
    that installs stripped executables, and may install libraries with
 
1104
    unneeded or debugging sections stripped.
 
1105
    </li>
 
1106
 
 
1107
    <li>
 
1108
    On Power7 systems, there is a potential problem if you build the GCC
 
1109
    compiler with a host compiler using options that enables the VSX
 
1110
    instruction set generation.  If the host compiler has been patched so that
 
1111
    the <code>vec_ld</code> and <code>vec_st</code> builtin functions
 
1112
    generate Altivec memory instructions instead of VSX memory instructions,
 
1113
    then you should be able to build the compiler with VSX instruction
 
1114
    generation.
 
1115
    </li>
 
1116
  </ul>
 
1117
 
 
1118
<h2>Changes for GCC Developers</h2>
 
1119
 
 
1120
<p>Note: these changes concern developers that develop GCC itself or
 
1121
  software that integrates with GCC, such as plugins, and not the
 
1122
  general GCC users.</p>
 
1123
 
 
1124
<ul>
 
1125
  <li>
 
1126
    The <code>gengtype</code> utility, which previously was internal to
 
1127
    the GCC build process, has been enchanced to provide GC root
 
1128
    information for plugins as necessary.
 
1129
  </li>
 
1130
  <li>
 
1131
    The old GC allocation interface of <code>ggc_alloc</code> and
 
1132
    friends was replaced with a type-safe alternative.
 
1133
  </li>
 
1134
</ul>
 
1135
 
 
1136
 
 
1137
 
 
1138
 
 
1139
<!-- ==================================================================== -->
 
1140
 
 
1141
<div class="copyright">
 
1142
 
 
1143
<p>Please send FSF &amp; GNU inquiries &amp; questions to
 
1144
<a href="mailto:gnu@gnu.org">gnu@gnu.org</a>.
 
1145
There are also <a href="http://www.gnu.org/home.html#ContactInfo">other ways
 
1146
to contact</a> the FSF.</p>
 
1147
 
 
1148
<p>These pages are <a href="http://gcc.gnu.org/about.html">maintained by
 
1149
the GCC team</a>.</p>
 
1150
 
 
1151
<address>For questions related to the use of GCC, please consult these web
 
1152
pages and the <a href="http://gcc.gnu.org/onlinedocs/">GCC manuals</a>. If
 
1153
that fails, the <a href="mailto:gcc-help@gcc.gnu.org">gcc-help@gcc.gnu.org</a>
 
1154
mailing list might help.<br />
 
1155
Please send comments on these web pages and the development of GCC to our
 
1156
developer list at <a href="mailto:gcc@gcc.gnu.org">gcc@gcc.gnu.org</a>.
 
1157
All of our lists have
 
1158
<a href="http://gcc.gnu.org/lists.html">public archives</a>.
 
1159
</address>
 
1160
 
 
1161
<p>Copyright (C) Free Software Foundation, Inc.<br />
 
1162
Verbatim copying and distribution of this entire article is
 
1163
permitted in any medium, provided this notice is preserved.</p>
 
1164
 
 
1165
<table width="100%" border="0"><tr><td>
 
1166
  <!-- IGNORE DIFF -->Last modified 2011-03-22
 
1167
</td><td align="right" valign="bottom">
 
1168
  <a href="http://validator.w3.org/check/referer">
 
1169
      <img src="http://www.w3.org/Icons/valid-xhtml10"
 
1170
     alt="Valid XHTML 1.0" border="0" width="88" height="31" />
 
1171
   
 
1172
  </a>
 
1173
</td></tr></table>
 
1174
 
 
1175
</div>
 
1176
 
 
1177
<!-- ==================================================================== -->
 
1178
 
 
1179
</body>
 
1180
     </html>
 
1181
  
 
1182