This is the mail archive of the fortran@gcc.gnu.org mailing list for the GNU Fortran project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Attached patch makes MIN and MAX intrinsics return correct IEEE results (and consistent results) when given one or more NaN as arguments. It does so by changing the code generated from MAX(a,b) := (b > a ? b : a) into MAX(a,b) := (b > a || isnan(a) ? b : a); handling of multiple arguments is done similarly.
The introduction of isnan() tests probably has a cost, but hey, we want a correct result anyway, don't we? Thus, I added a note into the code saying that when IEEE_ARITHMETIC is implemented, we might want to make this codepath dependent on IEEE_ARITHMETIC being used (I don't think we should do that, but we should certainly discuss the option).
I also added a testcase, I don't have much experience with NaNs so I don't know if all targets have them, does someone know if "x = 0.0 ; x = x / x;" will result in a NaN in all cases?
This is OK.
Bootstrapped and regtested on x86_64-linux, OK for mainline? FX
:ADDPATH fortran:
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |