[Bug 1740] Change PowerPC multi-libs for e200 and e500 cores

bugzilla-daemon at rtems.org bugzilla-daemon at rtems.org
Tue Feb 22 15:48:19 UTC 2011


Sebastian Huber <sebastian.huber at embedded-brains.de> changed:

           What    |Removed                     |Added
   Attachment #1110|0                           |1
        is obsolete|                            |

--- Comment #9 from Sebastian Huber <sebastian.huber at embedded-brains.de> 2011-02-22 09:48:18 CST ---
Created an attachment (id=1111)
 --> (https://www.rtems.org/bugzilla/attachment.cgi?id=1111)
Patch against GCC 4.5.2.

It seems that only few combinations of the -mcpu=8520, -mfloat-gprs=*, -mspe,
and -mabi=spe flags are well tested in GCC.  After some tests these
combinations seemed to work (test on actual hardware, not just compile and link

(1) -mcpu=8540 -msoft-float
(2) -mcpu=8540 -mspe -mabi=spe -mfloat-gprs=single
(3) -mcpu=8540 -mspe -mabi=spe -mfloat-gprs=double

Code generated with each of these options is ABI compatible, because the
-mabi=spe option does not alter the normal EABI parameter passing conventions. 
The parameter passing in case (2) and (3) is not optimal from a hardware point
of view, but in case (3) I had several internal compiler errors without the
-mspe and -mabi=spe option.

The paranoia test program works with all three variants.  Only (1) is full IEEE
754 conform, because in cases (2) and (3) we need some software exception
handler to help the hardware in some special cases (see also Signal Processing
Engine (SPE) Programming Environments Manual:
IEEE Std 754™ Compliance).

We should use the following SUBSUBTARGET_OVERRIDE_OPTIONS to generate option
combinations (1), (2), and (3) for the multi-libs:

  do {                            \
    if (TARGET_E500)                    \
      {                            \
        if (!rs6000_explicit_options.float_gprs)    \
          rs6000_float_gprs = 1;             \
        if (rs6000_float_gprs != 0 &&            \
            !rs6000_explicit_options.spe)        \
          rs6000_spe = 1;                \
        if (rs6000_spe &&                \
            !rs6000_explicit_options.spe_abi)        \
          rs6000_spe_abi = 1;                \
      }                            \
  } while(0)

Because of:

+MULTILIB_MATCHES       += mcpu?8540=mcpu?8548

should we use:

+%{mcpu=854?: %{!Dppc*: %{!Dmpc*: -Dppc8540}  } }"

instead of:

+%{mcpu=8540: %{!Dppc*: %{!Dmpc*: -Dppc8540}  } }"


Configure bugmail: https://www.rtems.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are watching all bug changes.

More information about the bugs mailing list