This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc 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]

Re: soft-fp: support after-rounding tininess detection


On Wed, 12 Feb 2014, Richard Henderson wrote:

> But it still makes no sense to me.  E.g. rounding up,
> 
>    X_f = 111...1100
> 
> with the shift sees no carry into OVERFLOW, but then the subsequent
> "real" rounding does see carry into (OVERFLOW>>1).  So now we have
> underflow signaled for a result that's not subnormal.

Yes, that's correct: for both before-rounding and after-rounding tininess 
detection you get underflow signaled for some cases where the final result 
is not subnormal or zero.  For example, the following on x86_64 (an 
after-rounding architecture), converting to double a long double value 
that's tiny when rounded to normal precision but where the final result is 
not subnormal:

#include <fenv.h>
#include <stdio.h>

volatile long double ld = 0x1.fffffffffffffp-1023L;
volatile double d;

int
main (void)
{
  d = ld;
  printf ("%d\n", fetestexcept (FE_UNDERFLOW));
  printf ("%a\n", d);
  return 0;
}

produces output

16
0x1p-1022

i.e. underflow (FE_UNDERFLOW == 16) has been signaled but the final result 
is the least normal value.  In the x86 manual I have to hand (Intel 64 and 
IA-32 Architectures Software Developer's Manual Combined Volumes: 1, 2A, 
2B, 2C, 3A, 3B and 3C Order Number: 325462-047US June 2013), this is 
described in "4.9.1.5 Numeric Underflow Exception (#U)" (presumably also 
at similar locations in other versions of the manuals).

-- 
Joseph S. Myers
joseph@codesourcery.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]