MVME5500 broken with gcc-4.0.2

Till Straumann strauman at
Thu Nov 3 17:53:50 UTC 2005

Phillip Sorensen wrote:

> Joel Sherrill <joel at> wrote:
>> Till Straumann wrote:
>>> rtems/gcc (implicitely) uses -maltivec on all 74xx CPUS and
>>> the MVME5500 calls for -mcpu=7450.
>>> Unfortunately, with -maltivec, gcc uses vector registers for
>>> some optimizations.
>> What are those optimizations?  Are they integer or floating point
>> related?
> I have found at least one place.  For some reason, one of the 
> optimizations uses a vector register in the bootpc_init function.  I 
> don't have a version with debugging symbols, but it appears that the 
> code is possible a translation of the bzero function.  (The dhcp_init 
> function which runs fine is almost identical, except it uses memset 
> instead of bzero.)
> The code generated is
> vxor    v0,v0,v0
> stvx    v0,r24,r0
> lis     r4,6
> mr      r3,r24
> stvx    v0,r0,r24

Yes. There are more of those. The strange thing is that it doesn't seem
to be possible to reproduce the compiler's behavior with something simple

unsigned xx[4];

Another place where vxor/stvx appeared was svctcp_create() [rpc library].
I played a little bit with that code and as I simplified it by deleting 
the inline assembly for bzero() changed (now using stw)...


>>> Workaround:
>>> make/custom/mvme5500: use -mcpu=750
> Compiling with -mcpu=750 produces code that runs without the previous 
> problem.

More information about the users mailing list