CT-NG: floating point support in Newlibs printf?
Jeppe Ledet-Pedersen
jledet@space.aau.dk
Mon Oct 25 15:19:00 GMT 2010
Yann, All,
On 2010-10-25 08:54, Jeppe Ledet-Pedersen wrote:
[--SNIP--]
> If I i run "arm-unknown-eabi-cpp -dD" my toolchain defines both
> __ARMEL__, __SOFTFP__ and __VFP_FP__ which should be taken into account
> by Newlib in include/machine/ieeefp.h to use the correct floating point
> format.
[--SNIP--]
I have performed some further debugging of my floating point problems,
but I still don't have a solution.
__IEEE_LITTLE_ENDIAN is correctly set by include/machine/ieeefp.h and
consequently IEEE_8087 is defined in both stdlib/mprec.h and
stdio/vfieeefp.h. The macros word0()/word1() also appears to be set
correctly. _DOUBLE_IS_32BITS is not defined.
With my test code (http://pastebin.com/3Dsb9siL), I get the following
output:
00 00 00 00 00 00 55 c0
a is 0.000000
00 00 55 c0 00 00 00 00
a (flipped) is -84.000000
According to "Format of VFP values" from the ARM Developer Suite
Developer Guide
(http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0056d/Bcfibfha.html):
"in little-endian mode, the more significant word of a two-word
double-precision value, containing the exponent, has the higher address"
So it appears that GCC stores the double value in correct little-endian,
VFP format but Newlib will only print it if converted to FPA format. I
have looked through the code for _vfprint_r and _dtoa_r but haven't
noticed anything suspicious.
Can any of you reproduce this behavior on your platforms? Suggestions to
what could be the culprit are very welcome. Maybe I should post my
question on the Newlib mailing list as well.
Thank you in advance.
Best regards,
Jeppe
--
For unsubscribe information see http://sourceware.org/lists.html#faq
More information about the crossgcc
mailing list