[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: multilib question



Ralf Corsepius wrote:
On Thu, 2005-11-10 at 09:07 -0800, Till Straumann wrote:

Ralf Corsepius wrote:

On Wed, 2005-11-09 at 22:06 -0800, Till Straumann wrote:


I want to build gcc/newlib with the following variants:

-mcpu=860 -soft-float
-mcpu=603e -Dmpc8260
-mcpu=604
-mcpu=7400 -mabi=altivec -maltivec -mvrsave=yes
-mcpu=7400 -mabi=altivec -maltivec -mvrsave=no
-mcpu=7400 -mabi=altivec -mno-altivec

how do I have to set the MULTILIB_xxx variables in 't-rtems' ?

OK, let me simplify my question:

I want something like MULTILIB_EXTRA_OPTS but it should only
apply to one specific variant. E.g., -mcpu=7400 should always
activate -mabi=altivec but -mabi=altivec should not be active
on other cpus.

Generally speaking, this means adding an extra element to the vector of multilibs.

I.e.
* to extend MULTILIB_OPTIONS and MULTILIB_DIRNAMES by one element,
* to extend MULTILIB_EXCEPTIONS to remove all those permutations of
flags you don't want.

That's what I'm currently experimenting with. However, it makes the directory tree deeper...

I.e., if I only had

MULTILIB_OPTIONS    = mcpu=7400 mno-altivec
MULTILIB_DIRNAMES   = m7400 novec
MULTILIB_EXTRA_OPTS = mabi=altivec
MULTILIB_EXCEPTIONS = mno-altivec

I would get

 m7400/       /* m7400 with implied maltivec; mabi=altivec appended */
 m7400/novec  /* m7400, mno-altivec; mabi=altivec appended          */

However, if I add more CPUs and thus cannot use EXTRA_OPTS for mabi=altivec, by adding it to _OPTIONS and _DIRNAMES and applying
proper filtering the libs end up under


 m7400/vecabi
 m7400/vecabi/novec

can get a bit annoying if yet more options were to be added to
m7400 only...


It's basically the same as soft-floats are implemented in t-rtems (some cpus have both soft-float/fpu variants, some cpus have fpu variants only (imply hard-float), some variants have soft-float only (imply soft-float).

Finally, for some reasons I never understood, powerpc-rtems-gcc has
-mno-eabi in its MULTILIB_EXTRA_OPTS, which I am not sure whether it
interferes with -mabi=*.

It does not. -meabi selects the EABI and -mno-eabi the default (?) ie,
SYSV abi. -mabi=altivec (info gcc) adds altivec extensions to the current ABI. This is especially important if someone were to use -meabi
because of the reduced stack alignment.


 -meabi -> 8byte stack algmnt, r2 may be used for sdata2&friends,
           __eabi called at init
 -meabi -mabi=altivec -> 16byte stack algmnt, r2 used, __eabi called
 -mno-eabi -> 16byte stack algmnt, r2 not used, __eabi not called
 -mno-eabi -mabi=altivec -> 16byte stack algmnt, no r2,
            altivec extensions (ATM I'm not aware of anything other than
            stack algmnt).

baseline: if you link altivec code against a library compiled with -meabi only, your stack can be screwed up.

OTOH, low-end/low-mem CPUs might be interested in a meabi variant
due to the looser stack alignment req and extended short data areas
(gain in speed *and* footprint).

T.


Ralf