#ifndef TARGET_SPECIFIC_SUBSTITUE_FOR_MODE_DF typedef float DFtype __attribute__ ((mode (DF))); #else typedef float DFtype __attribute__ ((mode (TARGET_SPECIFIC_SUBSTITUE_FOR_MODE_DF))); #endif
These libgcc2 functions really are tied to modes, not to types. So if double is SFmode, gcc will never call one of the *df* functions for it. Meanwhile, some targets that make double be SFmode also make long double be DFmode, and hence we do still need the *df* functions defined exactly as they are currently defined in order for the long double support to work. Hence it would be very wrong to redefine the *df* functions to use mode (SF) instead of mode (DF) for any target.
If this is a simple matter of not being able to compile some of the functions in libgcc2.c, one possible solution would be to avoid compiling them. You could use the trick used in arm/t-symbian, which is to put them in LIB1ASMFUNCS.
Otherwise, it isn't clear what the problem is, because libgcc2 has been using these types without apparent problem for a very long time. If there is a problem, you need to be clearer about what exactly the problem is. If the problem is one of the bigger modes, then we can add ifdefs to control when it is used.
--
Jim Wilson, GNU Tools Support, http://www.SpecifixInc.com