Hi all,

The attached patch improves our code generation for some of the IEEE_ARITHMETIC 
functions: some testing functions (is*) and some arithmetic (logb, rint, scalb, 
…). The interfaces are still present in the module file generated as part of 
the library (which allows, in particular, for accurate testing of the extent of 
support we have), but we catch them before emitting the actual function call 
and emit front-end-generated code instead. This code uses some intrinsics that 
we didn’t use in the front-end so far (some type generic, some not), so I have 
added them (logb, remainder, rint, signbit).

The patch is nice because it improves the quality of the code generated, 
eliminating in many cases the need for a function call. It is also a 
prerequisite to extend our IEEE support to more floating-point types (extended 
precision and binary128, on some targets including i386/x86_64). Without it, we 
would have a combinatorial explosion of the number of “helper” functions in the 
library.

Also, I’m removing symbols from gfortran.map, but no branching/release has 
occurred since I added them in the first place: it should be all good.

Regtested on x86_64-apple-darwin14. This regresses ieee_2.f90, at -m32 
-fno-float-store only, where we seem to trigger a missimplification of 
__builtin_rint(). I’ll send, just after this one, a mail to gcc to get some 
help on that, and track the issue separately.

OK to commit?
FX


Attachment: ieee.ChangeLog
Description: Binary data

Attachment: ieee.diff
Description: Binary data

Reply via email to