[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Problems with floating-point support on ARM
- Date: Thu, 10 Sep 2009 11:06:01 +0200
- From: sebastian.huber at embedded-brains.de (Sebastian Huber)
- Subject: Problems with floating-point support on ARM
Hi,
RTEMS currently supports only soft-float ARM so this will be assumed. The
default floating-point model for GCC on ARM is FPA.
That means (excerpt from the corresponding ARM document):
Little-endian double-precision values are neither pure little-endian nor pure
big-endian.
This differs from that more recent VFP (Vectored Floatin-Point architecture).
In IEEE 754 we have the following double format:
least significant word (lsw): fraction [31:0]
moast significant word (msw): sign | exponent | fraction [51:32]
This will be stored in different ways:
VFP LE VFP BE FPA
lower address lsw msw msw
higher address msw lsw lsw
The important thing here is that on little-endian the msw and lsw are switched.
Newlib does not support the FPA floating-point model on little-endian. In this
case it produces wrong results and writes to arbitrary memory locations.
A possible fix is to add the following options to the GCC configuration command
line:
--with-float=soft
--with-fpu=vfp
The VFP floating-point hardware model is not implemented in GCC, thus the
hard-float multilibs have to be disabled in gcc/config/arm/t-rtems.
Have a nice day!
--
Sebastian Huber, embedded brains GmbH
Address : Obere Lagerstr. 30, D-82178 Puchheim, Germany
Phone : +49 89 18 90 80 79-6
Fax : +49 89 18 90 80 79-9
E-Mail : sebastian.huber at embedded-brains.de
PGP : Public key available on request.
Diese Nachricht ist keine gesch?ftliche Mitteilung im Sinne des EHUG.