MVME5500 broken with gcc-4.0.2
strauman at slac.stanford.edu
Thu Nov 3 17:53:50 UTC 2005
Phillip Sorensen wrote:
> Joel Sherrill <joel at OARcorp.com> 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
> 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
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)...
>>> make/custom/mvme5500: use -mcpu=750
> Compiling with -mcpu=750 produces code that runs without the previous
More information about the users