On 15/11/16 16:22, FX wrote: >> There seems to be a separate api for checking trapping support: >> ieee_support_halting, but it only checked if the exception status >> flags are available, so check trapping support too by enabling >> and disabling traps. > > Thanks for the patch. > > I am worried about the unnecessary operations that we’re doing here: doesn’t > glibc have a way to tell you what it supports without having to do it (twice, > enabling then disabling)? > > Also, the glibc doc states that: "Each of the macros FE_DIVBYZERO, > FE_INEXACT, FE_INVALID, FE_OVERFLOW, FE_UNDERFLOW is defined when the > implementation supports handling of the corresponding exception”. It evens > says: > >> Each constant is defined if and only if the FPU you are compiling for >> supports that exception, so you can test for FPU support with ‘#ifdef’. > > So it seems rather clear that compile-time tests are the recommended way to > go.
i think that's a documentation bug then, it should say that the macros imply the support of fpu exception status flags, but not trapping. (otherwise glibc could not provide iso c annex f conforming fenv on aarch64 and arm, where FE_* must be defined, but only status flag support is required.) disabling/enabling makes this api a lot heavier than before, but trapping cannot be decided at compile-time, although the result may be cached, i think this should not be a frequent operation. otoh rereading my patch i think i fail to restore the original exception state correctly.