Rev. 1.50, 10/04, page 374 of 448
qNaN : *FPUL = 0x7fbfffff; break;
sNaN : set_V();
if((FPSCR & ENABLE_V) == 0) *FPUL = 0x7fbfffff;
else fpu_exception_trap(); break;
}
}
void normal_fcnvds(int m, float *FPUL)
{
int sign;
float abs;
union {
float f;
int l;
} dstf,tmpf;
union {
double d;
int l[2];
} dstd;
dstd.d = DR[m>>1];
if(dstd.l[1] & 0x1fffffff)) set_I();
if(FPSCR_RM == 1) dstd.l[1] &= 0xe0000000; /* round toward zero*/
dstf.f = dstd.d;
check_single_exception(FPUL, dstf.f);
}
FCNVDS Special Cases
DRn +NORM –NORM +0 –0 +INF –INF qNaN sNaN
FCNVDS(DRn FPUL) FCNVDS FCNVDS +0 –0 +INF –INF qNaN Invalid
Note: When DN = 1, the value of a denormalized number is treated as 0.