http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60166

            Bug ID: 60166
           Summary: ARM default NAN encoding violates EABI
           Product: gcc
           Version: 4.9.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libgcc
          Assignee: unassigned at gcc dot gnu.org
          Reporter: joey.ye at arm dot com

#include <stdio.h>
#include <string.h>
#include <math.h>
int g;
float i = 0.0 ,j = 0.0 ;

int main()
{
        float f = i / j;
        memcpy(&g, &f, sizeof(g));
        printf("f=%f, hex=%x\n", f, g);
        return 0;
}

When built for ARM thumb1, result is:
f=nan, hex=7fffffff

While according to the RTABI
(http://infocenter.arm.com/help/topic/com.arm.doc.ihi0043d/IHI0043D_rtabi.pdf)
section 4.1.1.1:

When not otherwise specified by IEEE 754, the result on an invalid operation
should be the quiet NaN bit pattern with only the most significant bit of the
significand set, and all other significand bits zero.

So current libgcc is violating ARM EABI.

I have a patch under testing.

Reply via email to