Yangfei (Felix | 25 Oct 05:35 2014

[PING][AARCH64, Question] Does AARCH64 GCC support long calls?

> Hi,
>     I find that the -mlong-calls option is not there for AARCH64. So can this port
> generate long calls?
>     Any plan on this option? I would like to have a try on this if it's missing :-)
>     Thanks.

Any comments?
Georg-Johann Lay | 24 Oct 16:03 2014

PR63633: May middle-end come up width hard regs for insn expanders?

Investigating PR63633 turned out that the middle-end calls insn expanders with 
hard registers, namely mulsi3 from avr back-end:

(define_expand "mulsi3"
   [(parallel [(set (match_operand:SI 0 "register_operand" "")
                    (mult:SI (match_operand:SI 1 "register_operand" "")
                             (match_operand:SI 2 "nonmemory_operand" "")))
               (clobber (reg:HI 26))
               (clobber (reg:DI 18))])]

is being called with operands[0] = (reg:SI 22).  This overlaps hard (reg:DI 18) 
which extends from R18...R25.

mulsi3 assumes all operands are pseudo registers and consequently the generated 
insn raises an ICE in the remainder, and there are other cases for other 
expanders where wrong code gets generated because the clobbers clobber an 
hard-reg input operand.

Is it in order to have hard registers as arguments to expanders (and maybe also 
to insns) like that at expand time (pass .expand) ?

It is easy enough to kick these hard regs into new pseudos in the respective 
expanders, however the question arises where the culprit is:

back-end or middle-end?

Until PR63633 I've never seen middle-end coming up with hard regs that way, 
thus bunch of avr insns have been written under that -- maybe wrong -- 
(Continue reading)

Richard Sandiford | 24 Oct 14:57 2014

Removing "enum" from "enum machine_mode"

I have some plans to "clean up" the machine_mode handling and perhaps
make it hierarchical, so that functions that can only handle scalar
integer modes (say) will be able to take a scalar_int_mode rather than
a machine_mode as argument.  The first step would be to do a blanket
removal of the (in C++) redundant "enum" from all those "enum machine_mode"
variables, parameters and fields.

Regardless of whether the hierarchy sounds like a good idea, would removing
the "enum" be OK?  There's never a good time for that much churn, but since
the release branches are fairly mature and since we already have quite a
bit of churn in rtl land between 4.9 and 5, now seemed like as good a
time as any.


gccadmin | 24 Oct 00:37 2014

gcc-4.8-20141023 is now available

Snapshot gcc-4.8-20141023 is now available on
and on various mirrors, see http://gcc.gnu.org/mirrors.html for details.

This snapshot has been generated from the GCC 4.8 SVN branch
with the following options: svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch revision 216601

You'll find:

 gcc-4.8-20141023.tar.bz2             Complete GCC


Diffs from 4.8-20141016 are available in the diffs/ subdirectory.

When a particular snapshot is ready for public consumption the LATEST-4.8
link is updated and a message is sent to the gcc list.  Please do not use
a snapshot before it has been announced that way.

Charles Baylis | 23 Oct 19:52 2014

Restricting arguments to intrinsic functions


( tl;dr: How do I handle intrinsic or builtin functions where there
are restrictions on the arguments which can't be represented in a C
function prototype? Do other ports have this problem, how do they
solve it? Language extension for C++98 to provide static_assert?)

I'm trying to resolve some problems with error reporting for NEON (ARM
SIMD/vector) intrinsics.
eg https://bugs.linaro.org/show_bug.cgi?id=418

The NEON intrinsics are defined in a header file, arm_neon.h, which
includes type definitions and inline functions which implement the
intrinsics in terms of __builtin functions provided by gcc.

A number of these intrinsics (eg shift by a constant, set/get Nth lane
of vector) are defined to take a compile-time integer constant as one
of their arguments. For example:

The vshrn_n_s16 (narrowing vector shift right by a constant) intrinsic
is defined as:
    __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
    vshrn_n_s16 (int16x8_t __a, const int __b)
      return (int8x8_t)__builtin_neon_vshrn_nv8hi (__a, __b, 1);

These examples demonstrate some valid and invalid use
    int8x16_t v = vshrn_n_u16(v1, 5); // valid

(Continue reading)

Jakub Jelinek | 23 Oct 17:18 2014

GCC 4.9.2 Status Report (2014-10-23)


GCC 4.9.2-rc1 has been created and announced, the branch is now frozen
for blocking regressions and documentation fixes only and all changes
to the branch require a RM approval.
If all goes well, 4.9.2 will be released in a week.

Quality Data

Priority          #   Change from Last Report
--------        ---   -----------------------
P1                0      0
P2               82   -  6
P3               40   + 19
--------        ---   -----------------------
Total           122   + 13

Previous Report


The next report will be sent by me again, announcing the
4.9.2 release or another release candidate if needed.

Jakub Jelinek | 23 Oct 17:14 2014

GCC 4.9.2 Release Candidate available from gcc.gnu.org

GCC 4.9.2 Release Candidate available from gcc.gnu.org

The first release candidate for GCC 4.9.2 is available from


and shortly its mirrors.  It has been generated from SVN revision 216570.

I have so far bootstrapped and tested the release candidate on
x86_64-linux and i686-linux.  Please test it and report any issues to

If all goes well, I'd like to release 4.9.2 on Thursday, 30th.

Andrew Bennett | 23 Oct 16:47 2014
Andrew Bennett <Andrew.Bennett <at> imgtec.com>

Subject: RE: gcc testsuite

RE: gcc testsuite

> Hi,
>    I couldn't find newlib in my source gcc-4.5.5 directory. I download
> and try to install it, i think it is not completed
> when i run make install ...it ends quickly with the message shown below
> make[2]: Leaving directory /gcc-4.4/build_newlib/etc'
> make[1]: Nothing to be done for `install-target'

I would check that firstly you have placed the newlib source directory 
within the root of the gcc source tree, and secondly that it is called newlib.

Then try running make (you might have to re-configure again) from where you built
gcc originally.


Martin Uecker | 23 Oct 07:12 2014

Bounded Array Type?

Sorry for bringing this up again, but this could work:

void foo(int x, int (*s)[x])
        (*s)[x] = 1;	// <- undefined behaviour

Such an access beyond the specified length means that either

1. the array is accessed out-of-bounds or
2. was accessed using an incompatible pointer 

and a compiler would be allowed to catch this.


gccadmin | 23 Oct 00:35 2014

gcc-4.9-20141022 is now available

Snapshot gcc-4.9-20141022 is now available on
and on various mirrors, see http://gcc.gnu.org/mirrors.html for details.

This snapshot has been generated from the GCC 4.9 SVN branch
with the following options: svn://gcc.gnu.org/svn/gcc/branches/gcc-4_9-branch revision 216568

You'll find:

 gcc-4.9-20141022.tar.bz2             Complete GCC


Diffs from 4.9-20141015 are available in the diffs/ subdirectory.

When a particular snapshot is ready for public consumption the LATEST-4.9
link is updated and a message is sent to the gcc list.  Please do not use
a snapshot before it has been announced that way.

Jan Beulich | 22 Oct 17:28 2014

common subexpression elimination no longer working for asm()?

I noticed the issue with 4.9.1 (in that x86 Linux'es
this_cpu_read_stable() no longer does what the comment preceding
its definition promises), and the example below demonstrates this in
a simplified (but contrived) way. I just now verified that trunk has
the same issue; 4.8.3 still folds redundant ones as expected. Is this
known, or possibly even intended (in which case I'd be curious as to
what the reasons are, and how the functionality Linux wants can be
gained back)?

Thanks, Jan

void dummy(int, int);
extern int m, p;

static inline int read_m(void) {
	int i;

	asm("nop %1" : "=r" (i) : "m" (m));
	return i;

static inline int read_p(void) {
	int i;

	asm("nop %P1" : "=r" (i) : "p" (&p));
	return i;

void test(void) {
	dummy(read_m(), read_m());
(Continue reading)