On Thu, 19 Jan 2017, Tamar Christina wrote: > > Also, I don't think the call to perform_ibm_extended_fixups in > > is_subnormal is correct. Subnormal for IBM long double is *not* the same > > as subnormal double high part. Likewise it's incorrect in is_normal as > > well. > > The calls to is_zero and is_subnormal were incorrect indeed. I've > corrected them by not calling the fixup code and to instead make sure it > falls through into the old fp based code which did normal floating point > operations on the number. This is the same code as was before in > fpclassify so it should work.
For is_zero it's fine to test based on the high part for IBM long double; an IBM long double is (zero, infinite, NaN, finite) if and only if the high part is. The problem is the different threshold between normal and subnormal. > As for is_normal, the code is almost identical as the code that used to > be in fold_builtin_interclass_mathfn in BUILT_IN_ISNORMAL, with the > exception that I don't check <= max_value but instead < inifity, so I > can reuse the same constant. The old code set orig_arg before converting IBM long double to double. Your code sets it after the conversion. The old code set min_exp based on a string set from REAL_MODE_FORMAT (orig_mode)->emin - 1; your code uses the adjusted mode. Both of those are incorrect for IBM long double. -- Joseph S. Myers jos...@codesourcery.com