Ok. I am starting to see the whole picture now.
So the whole thing appears to work with --disable-shared, just because
the way the linker
loads symbols in presence of libgcc_s.so versus libgcc.a.
Follow up question:
The e500 abi actualy defines long double to be 128bits floats.
On rs6000.c, rs6000_init_libfuncs links to __gcc_qadd becasue of
TARGET_HARD_FLOAT
shouldn't that be TARGET_HARD_FLOAT && TARGET_FPRS
and also have:
diff -u t-fprules-softfp~ t-fprules-softfp
--- t-fprules-softfp~ 2006-08-09 14:20:24.000000000 -0500
+++ t-fprules-softfp 2006-09-06 12:39:17.000000000 -0500
@@ -1,4 +1,4 @@
-softfp_float_modes := sf df
+softfp_float_modes := sf df tf
softfp_int_modes := si di
softfp_extensions := sfdf
softfp_truncations := dfsf
Would that be right ?
Thanks
Edmar
David Edelsohn wrote:
Soft-float implementation of long double support is in development
but not complete. Long double requires double precision registers, so it
only will work with e500 double. It also requires floating point
multiply-subtract (fmsub), which e500 double does not appear to
implement. This is why long double has been disabled for e500 by testing
for __NO_FPRS__. The soft-float support requires emulating fmsub, so it
might work on e500 as well at that point.
http://gcc.gnu.org/ml/gcc-patches/2006-03/msg01298.html is the
patch that disabled this. This was in response to PR 26607 reported by
you.
The __lttf2 references occur similarly because the cmptf2 pattern
checks for TARGET_FPRS. That could be relaxed for e500 double.
David