problem while building arm vfp softfloat gcc
Nicolas Pitre
nico@cam.org
Tue Feb 10 10:40:00 GMT 2004
On 10 Feb 2004, add wrote:
> I have already tried this on my platform, it still print out 0.000000
> so it seems like a problem of glibc.
> I swapped the register according to montavista's iwmmxt_le-gcc produced asm
> code. Are you sure that code is correct? if so, then that means montavista's
> toolchain is not compatible with others, although it uses the same vfp
> softfloat patch.
*** Beware ***
MV's iwmmxt_le toolchain is using VFP word ordering. My soft-float patch is
also using VFP word ordering by default.
*** However ***
Libraries like glibc need to be aware of it too, since they play with doubl
float values directly. See for example this patch I produced for uClibc:
--- ./libm/math_private.h.orig Sun Feb 8 21:19:46 2004
+++ ./libm/math_private.h Sun Feb 8 21:30:53 2004
@@ -35,11 +35,12 @@
ints. */
/*
- * Math on arm is little endian except for the FP word order which is
- * big endian.
+ * Math on arm is special:
+ * For FPA, float words are always big-endian.
+ * For VFP, floats words follow the memory system mode.
*/
-#if (__BYTE_ORDER == __BIG_ENDIAN) || defined(__arm__)
+#if (__BYTE_ORDER == __BIG_ENDIAN) || defined(__arm__) && !defined(__VFP_FP__)
typedef union
{
@@ -53,7 +54,7 @@
#endif
-#if (__BYTE_ORDER == __LITTLE_ENDIAN) && !defined(__arm__)
+#if (__BYTE_ORDER == __LITTLE_ENDIAN) && (!defined(__arm__) || defined(__VFP_FP__))
typedef union
{
Nicolas
------
Want more information? See the CrossGCC FAQ, http://www.objsw.com/CrossGCC/
Want to unsubscribe? Send a note to crossgcc-unsubscribe@sources.redhat.com
More information about the crossgcc
mailing list