My guess is that the ARM compiler does not like 64-bit values in
conditional expressions. The following C snippet:
typedef unsigned long long uvlong;
uvlong uvinf = ((uvlong)0x7FF00000<<32)|0x00000000;
uvlong uvneginf = ((uvlong)0xFFF00000<<32)|0x00000000;
double u2d(uvlong v);
double
__Inf(int sign)
{
return u2d(sign < 0 ? uvneginf : uvinf);
}
compiled with 8c seems OK, but with 5c causes an error:
% 5c -FTVw /tmp/nan64.c
/tmp/nan64.c:11 unknown vlong LIST
Using an if statement seems to get rid of the problem.
++L